UILabel的宽高自适应计算

iOS布局中,常常要计算UILabel的宽高,自动约束布局至今还用不熟,先把代码计算宽高的记一下:

一般这样几种需求:

1、给定字符串,限定label的宽高,自动调整label的font

    UILabel * label1 = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 50, 30)];
    label1.text = @"随便打几个字试试";
    label1.numberOfLines = 0;        //不设置时,默认是一行
    label1.adjustsFontSizeToFitWidth = YES;
//当未设置numberOfLines时,会压缩字体大小,在限定的宽度一行内显示完所有文字
//设置numberOfLines=0后,如果label控件能容纳下原始大小的全部文字,就会拆成多行显示;否则会压缩字体大小

2、给定字符串,限定label字体大小,自动调整label框

UILabel * label2 = [[UILabel alloc]initWithFrame:CGRectMake(0, 200, 50, 30)];
    label2.text = @"随便打几个字试试";
   // label2.numberOfLines = 0;
    [label2 sizeToFit];
//这里分两种情况,如果未设置numberOfLines = 0,则会自动调整label宽高;
//否则,会动态变化高度,宽度维持设置的宽度,变成多行
//这种设置时,如果设置的frame大于字符串的占用,label的frame会自动收紧

3、计算字符串宽高

UILabel * label3 = [[UILabel alloc]initWithFrame:CGRectMake(0, 300, 300, 100)];
    label3.text = @"我来是撒好滴撒hi多少我安徽的覅USD和是的撒";
    label3.numberOfLines = 0;
    CGSize size = [self sizeWithString:label3.text font:label3.font maxSize:CGSizeMake(label3.frame.size.width, 300)];
    label3.bounds = CGRectMake(0, 0, size.width, size.height);
    label3.frame = CGRectMake(label3.frame.origin.x, label3.frame.origin.y, size.width, size.height) ;
   
- (CGSize)sizeWithString:(NSString *)str font:(UIFont *)font maxSize:(CGSize)maxSize {
    NSDictionary *dict = @{NSFontAttributeName : font};
    // 如果计算出的文字范围超出了指定的范围,返回的就是指定的范围
    // 如果计算出的文字范围小于指定的范围, 返回的就是真实的范围
    CGSize size =  [str boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil].size;
    return size;
}

//这种计算宽高,按需要设置numberOfLines;如果想计算高度,那肯定要设置numberOfLines=0的嘛;

总结:这三种计算都要注意numberOfLines的设置,单行的label要防止frame过宽。

一般来说,显示固定的标签,用第二种就够了。

timg

如果文章对你有帮助,欢迎点赞或打赏(金额不限)。你的打赏将全部用于支付网站服务器费用和提高网站文章质量,谢谢支持。

版权声明:

本文由 原创,商业转载请联系作者获得授权。
非商业转载请注明作者 雅乐网 ,并附带本文链接:
https://www.yalewoo.com/uilabel_auto_height_width.html

上一篇:

下一篇:

我要评论

验证码*: 6 + 3 =