UILabel、UITextView根据字符串动态计算高度

来源:互联网 发布:词云图制作软件 编辑:程序博客网 时间:2024/05/16 07:54

字符串动态计算控件的高度的方法对于 UILabel 和 UITextView 来说是不同的,UITextView 上左下右都有一个 8px 的 padding,使用计算 UILabel 的方法来算 UITextView  的高度,得到的高度是偏小的,上下各少了 8px。

UILabel:

- (void)createLabel{    CGSize labelSize = [self getLabelSizeWithString:labelString andFontSize:15 andMaxFrameWidth:self.view.frame.size.width];        UILabel *label = [[UILabel alloc]init];    label.frame = CGRectMake(0, 64, labelSize.width, labelSize.height);    label.font = [UIFont systemFontOfSize:15];    label.backgroundColor = [UIColor redColor];    label.text = labelString;    label.textAlignment = NSTextAlignmentLeft;    label.numberOfLines = 0;    [self.view addSubview:label];}/*! *  根据字符串动态计算UILabel的高度 * *  @param text     字符串 *  @param fontSize font *  @param width    1、如果是定宽则传入UILabel预设的宽度(此种情况可能是多行) 2、如果只有一行,则高度有我们自己设定,但是宽度需要动态计算,此时可传入CGFLOAT_MAX * *  @return UILabel实际frame的宽高 */- (CGSize)getLabelSizeWithString:(NSString*)text andFontSize:(int)fontSize andMaxFrameWidth:(float)width{    CGRect textRect = [text boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX)                                         options:NSStringDrawingUsesLineFragmentOrigin                                      attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:fontSize]}                                         context:nil];    /*!     *  其实算出来的textRect的宽度是不准的,高度是准的;     *  如果需求是第1中情况下面是用来重设label宽度的代码;     *  第二种情况在一下判断条件中永远不会成立因为width足够大。     */    CGSize stringSize = [text sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:fontSize]}];    if(stringSize.width >= width)    {        textRect.size.width = width;    }    return textRect.size;}

UITextView:

/*! *  一定要先赋值textView.text然后才能计算 *  API sizeThatFits 注释: return 'best' size to fit given size. does not actually resize view. Default is return existing view size */- (void)createTextView{    CGFloat textViewWidth = self.view.frame.size.width;    UITextView *textView = [[UITextView alloc]init];    textView.text = textViewString;    textView.frame = CGRectMake(0, 200, textViewWidth, [self getTextViewheightForString:textView andWidth:textViewWidth]);    textView.font = [UIFont systemFontOfSize:15];    textView.backgroundColor = [UIColor redColor];        [self.view addSubview:textView];}- (float)getTextViewheightForString:(UITextView *)textView andWidth:(float)width{    CGSize sizeToFit = [textView sizeThatFits:CGSizeMake(width, CGFLOAT_MAX)];    return sizeToFit.height;}





0 0