1. 程式人生 > >實現UILabel自適應高度的兩種方式

實現UILabel自適應高度的兩種方式

1.sizeThatFits或者sizeToFit

UILabel *label=[[UILabel alloc]init];
labell.font=[UIFont systemFontOfSize:11.0];
label.text = @"今天天氣不錯呢,準備到中國參加耐克的活動,中國的球迷準備好了嗎?明天早上八點五棵松體育館見,我愛你們!";
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
CGSize size = [label sizeThatFits:CGSizeMake(200, MAXFLOAT)];//根據文字的長度返回一個最佳寬度和高度
label.frame = CGRectMake(0, 0, 200, size.height);//假如是自適應高度的話,就把寬度確定
ps:在使用sizeThatFits方法之前,label.text屬性必須要有值,不然無法計算

2.boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary<NSString *,id> *)attributes context:(NSStringDrawingContext *)context

NSDictionary *dict = @{NSFontAttributeName : [UIFont systemFontOfSize:13.0]};
NSString *
[email protected]
"今天天氣不錯呢,準備到中國參加耐克的活動,中國的球迷準備好了嗎?明天早上八點五棵松體育館見,我愛你們!"; CGSize size=[contentStr boundingRectWithSize:CGSizeMake(200, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil].size; UILabel *label=[[UILabel alloc]init]; labell.font=[UIFont systemFontOfSize:11.0]; label.numberOfLines = 0; label.text =contentStr; abel.frame = CGRectMake(0, 0, 200, size.height);

ps:該方法跟第一種方法相比較有一個優勢,它是被NSString物件呼叫的方法,因此可以直接用來計算NSString文字的寬度和高度,而sizeThatFits方法的呼叫物件是UIView,也就是說第二種方法的應用範圍更廣

pps:假如我們只是簡單地想要label自適應高度,而不需要準確地計算label的frame,可以使用sizeToFit

ppps:Swift中String型別呼叫的方法為boundingRect,而且該方法沒有提示,但是可以編譯通過。