在iOS开发开发中可能需要计算Lable宽度(一行)和计算Lable高度(多行)的需求。其实本质上就是计算字符串的宽度或高度。
1.计算单行Lable宽度:
调用方法:
//字符串对象调用
- (CGSize)sizeWithAttributes:(NSDictionary<NSString *,id> *)attrs;
参数:
attrs:这个字典中主要传入的参数是字体的大小。
范例:
//这个str可以认为是Lable.text
NSString * str = @"就让秋风带走我的思念带走我的泪,我还一直等候再相约的地点";
CGSize strSize = [str sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17]}];
//通过计算出来的宽度来创建lable。
UILabel * lable = [[UILabel alloc]initWithFrame:CGRectMake(0, 5, strSize.width, strSize.height)];
2.计算多行Lable的高度(也能计算单行宽度):
这里有个前提:既然是计算高度,必须有一个固定的宽度。
调用方法:
//字符串对象调用
- (NSRect)boundingRectWithSize:(NSSize)size options:(NSStringDrawingOptions)options;
参数:
size:这个size主要约束你的文本的宽或者高,如果想计算Lable高度,就要固定宽度,高度最好写0。如果想计算Lable宽度,固定高度,宽度最好写0。
options:这个参数可以根据计算要求做出选择。
1.NSStringDrawingUsesLineFragmentOrigin:整个文本将以每行组成的矩形为单位计算整个文本的尺寸。
2.NSStringDrawingUsesFontLeading:计算行高时使用行间距。(行高=字体大小+行间距)
3.NSStringDrawingUsesDeviceMetrics:计算布局时使用图元字形,而不是印刷字体。
4.NSStringDrawingTruncatesLastVisibleLine:如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。如果使用1选项,则该选项被忽略
范例:
NSString * str2 = @"就让秋风带走我的思念带走我的泪,我还一直等候再相约的地点,就让秋风带走我的思念带走我的泪,我还一直等候再相约的地点";
CGSize textSize = [str2 boundingRectWithSize:CGSizeMake(0, 320) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:12]} context:nil].size;
UILabel * lable2 = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, textSize.width, textSize.height)];