"文字包裹"的实现(是什么? "字符串"整体多大,label就多大)
- 设置字体的大小(文字的大小,直接影响"字符串"整体的宽和高
- 获取文字真实占用的宽度和高度
- 给具体的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
方法
- 它返回的高度是一行的高度.
-
NSString str =@"abcd\nefg";
//中间加了\n
换行.
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);
网友评论