[BS-01] 根据字符串对象的参数自动计算用来显示该字符串的UI控件的宽和高

根据字符串对象的参数自动计算用来显示该字符串的UI控件的宽和高

 

1.  影响昵称Label的高和宽的因素: 字体和字号大小、文字多少、高度取决于是否固定了宽度(是否限制了最大的宽度和高度)

2. 使用字符串对象的boundingRectWithSize方法自动计算,该字符串对象显示时需要的的CGRect值

[字符串对象 boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil]

3. 还需确保这里计算的时候使用的字体大小和创建Label时设置的字体大小一致, 故使用一个宏来统一设置。

注意:iOS方法中关于attributes参数的写法都在UIKit/NSAttributedString.h头文件下,该头文件还引用了

Foundation/NSAttributedString.h(Foundation框架也有该头文件)

 

4. 举例:  根据昵称的文字计算昵称label的宽和高

//定义name字体宏

#define nameFont [UIFont systemFontOfSize:12]

 

//1. 创建显示文字块的Label

        UILabel *lblName = [[UILabel alloc]init];

        lblName.font = nameFont;  //此处设置的字体需与用于自动计算的字体保持一致

 

//2. 根据文字块计算显示它的LabelCGSize    

    // 方法中attributes的参数: 字体字典

    NSDictionary *fontDict = @{NSFontAttributeName : nameFont};     //在设置Label字体时也必须用12号系统字,所以定义宏#define nameFont [UIFont systemFontOfSize:12]

  //根据文字参数计算显示Label的宽高

    CGRect nameRect = [nameStr boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:fontDict context:nil]; //不限定最大宽高

    //设置Frame

    CGFloat nameW = nameRect.size.width;

    CGFloat nameH = nameRect.size.height;

    CGFloat nameX = 10;

    CGFloat nameY = 10;

   lblName.frame = CGRectMake(nameX, nameY, nameW, nameH);

 

//3. 添加label

[self.view addSubview:lblName];

 

iOS开发者交流群:180080550
原文地址:https://www.cnblogs.com/stevenwuzheng/p/5405197.html