在iOS開發(fā)開發(fā)中可能需要計算Lable寬度(一行)和計算Lable高度(多行)的需求。其實本質(zhì)上就是計算字符串的寬度或高度。
1.計算單行Lable寬度:
調(diào)用方法:
//字符串對象調(diào)用
- (CGSize)sizeWithAttributes:(NSDictionary<NSString *,id> *)attrs;
參數(shù):
attrs:這個字典中主要傳入的參數(shù)是字體的大小。
范例:
//這個str可以認為是Lable.text
NSString * str = @"就讓秋風帶走我的思念帶走我的淚,我還一直等候再相約的地點";
CGSize strSize = [str sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17]}];
//通過計算出來的寬度來創(chuàng)建lable。
UILabel * lable = [[UILabel alloc]initWithFrame:CGRectMake(0, 5, strSize.width, strSize.height)];
2.計算多行Lable的高度(也能計算單行寬度):
這里有個前提:既然是計算高度,必須有一個固定的寬度。
調(diào)用方法:
//字符串對象調(diào)用
- (NSRect)boundingRectWithSize:(NSSize)size options:(NSStringDrawingOptions)options;
參數(shù):
size:這個size主要約束你的文本的寬或者高,如果想計算Lable高度,就要固定寬度,高度最好寫0。如果想計算Lable寬度,固定高度,寬度最好寫0。
options:這個參數(shù)可以根據(jù)計算要求做出選擇。
1.NSStringDrawingUsesLineFragmentOrigin:整個文本將以每行組成的矩形為單位計算整個文本的尺寸。
2.NSStringDrawingUsesFontLeading:計算行高時使用行間距。(行高=字體大小+行間距)
3.NSStringDrawingUsesDeviceMetrics:計算布局時使用圖元字形,而不是印刷字體。
4.NSStringDrawingTruncatesLastVisibleLine:如果文本內(nèi)容超出指定的矩形限制,文本將被截去并在最后一個字符后加上省略號。如果使用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)];