- UILabel的自動換行,自動換行的同時要自適應Frame大小。
- UITableView的行高自適應內容,實時調整高度。
- UILabel的自動換行
- 獲取UILabel的frame大小
- 獲取UILabel的字體大小
- 獲取UILabel的文本內容
- 根據上面的3部分數據,計算文本顯示區域大小
- 根據4計算的大小,實時改變UILabel的frame
NSString * labelStr = @“你好,這是UILabel的自動換行測試內容,主要實現多行數據的自動換行,自適應不同行數的數據”;
CGSize labelSize = {0, 0};
labelSize = [labelStr sizeWithFont:[UIFont systemFontOfSize:14]
constrainedToSize:CGSizeMake(200.0, 5000)
lineBreakMode:UILineBreakModeWordWrap];
//14 為UILabel的字體大小
//200為UILabel的寬度,5000是預設的一個高度,表示在這個范圍內
label.numberOfLines = 0;//表示label可以多行顯示
label.lineBreakMode = UILineBreakModeCharacterWrap;//換行模式,與上面的計算保持一致。
label.frame = CGRectMake(label.frame.origin.x, label.frame.origin.y, label.frame.size.width, labelSize.height);//保持原來Label的位置和寬度,只是改變高度。
- UITableView的行高自適應內容
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString * labelStr = @“你好,這是UILabel的自動換行測試內容,主要實現多行數據的自動換行,自適應不同行數的數據”;
CGSize labelSize = {0, 0};
labelSize = [labelStr sizeWithFont:[UIFont systemFontOfSize:14]
constrainedToSize:CGSizeMake(200.0, 5000)
lineBreakMode:UILineBreakModeWordWrap];
//14 為UILabel的字體大小
//200為UILabel的寬度,5000是預設的一個高度,表示在這個范圍內
return labelSize.height + delta;
//delta 是Cell除了自適應控件UILabel外的其它控件所占的高度。
}
小結:實現上面2個技術點后,評論相關的APP或者類似的APP都可以做到自適應內容,根據內容多少自動換行,自動調整控件的位置和大小,達到最優的顯示效果。