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

字符串动态计算控件的高度的方法对于 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;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值