文字包裹的实现

2019-11-18  本文已影响0人  js_huh

"文字包裹"的实现(是什么? "字符串"整体多大,label就多大)

  1. 设置字体的大小(文字的大小,直接影响"字符串"整体的宽和高
  2. 获取文字真实占用的宽度和高度
  3. 给具体的label赋值
//设置文本属性 - 大小:17,字体:系统默认
NSDictionary *nameAttr = @{NSFontAttributeName:[UIFont systemFontOfSize:17]};
//返回'字符串'的实际宽度和高度
CGSize nameSize = [self.status.name sizeWithAttributes:nameAttr];
CGFloat nameW = ceil(nameSize.width);
CGFloat nameH = ceil(nameSize.height);
//设置label的frame
self.nameLabel.frame = CGRectMake(nameX, nameY, nameW, nameH);
方法解读:
 默认情况下,系统文字使用大小:12点, 字体:Helvetica(Neue)

sizeWithAttributes:
    是什么? NSString的方法.
 - (CGSize)sizeWithAttributes:(NSDictionary<NSAttributedStringKey, id> *)attrs;
    作用? 返回,设置了属性的文字占用边框的大小.(就是这段文字真实占用的宽度和高度)

 NSAttributedString
    是什么? 就是字符串对象.@interface NSAttributedString : NSObject
    作用? 设置与管理,字符串以及单个字符的相关属性(如: 字体,字间距,颜色的调整)

 NSAttributedStringKey
    是什么? 是NSAttributedString的常数(Constants)
            typedef NSString *NSAttributedStringKey;
    作用?   应用于属性字符串(NSAttributedString)的文本属性(Key).
           就是在字典里面,担任Key的位置.

 NSFontAttributeName
    是什么? 是'NSAttributedStringKey'里面的一种.专门用来描述文本的字体(UIFont)
    它对应的Value是UIFont对象.

注意:
sizeWithAttributes方法

CGSize tempSize = [str sizeWithAttributes: @{NSFontAttributeName:[UIFont systemFontOfSize:17]} ];

tempSize 的长度为 @"abcd"的长度. 
而非, @"abcdefg"的长度

方法二:
boundingRectWithSize: options: attributes: context 实现文字包裹

此方法返回:
  给定选项和显示特征的矩形边框
参数的含义:
  boundingRectWithSize - 需要绘制的矩形大小
  options - 字符串绘制选项(以什么方式来绘制字符串)
    (如:NSStringDrawingUsesLineFragmentOrigin 指定原点为线段原点,不是基线原点) - (适用于多行文本的使用)
    NSStringDrawingUsesLineFragmentOrigin // 整个文本将以每行组成的矩形为单位计算整个文本的尺寸
  attributes - 应用于字符串的文本属性字典(如:字体
  context - 指定字符串上下文,调整时最小比例因子.
CGSize textSize = CGSizeMake(textW, MAXFLOAT);//文字的高度: MAXFLOAT-无穷
NSDictionary *textAttr = @{NSFontAttributeName:[UIFont systemFontOfSize:17]};//字体大小 17
//指定限制,获取实际字符串文本的边界
CGRect textR = [字符串文本 boundingRectWithSize:textSize options:NSStringDrawingUsesLineFragmentOrigin attributes:textAttr context:nil];
CGFloat H = textR.size.height;
self.text控件.frame = CGRectMake(X, Y, W, H);
上一篇 下一篇

猜你喜欢

热点阅读