iOS下 UILabel 如何自動換行


 

背景:
相信很多朋友都遇到過,文本的內容長度不一,需要根據內容的多少來自動換行處理。
場景:
很多APP中評論,有的評論長,有的評論短,有的一行,有的多行。
 
下面以評論的實現為例來說說具體如何實現。
 
技術點:
  1. UILabel的自動換行,自動換行的同時要自適應Frame大小。
  2. UITableView的行高自適應內容,實時調整高度。
實現方法:
  • UILabel的自動換行
  1. 獲取UILabel的frame大小
  2. 獲取UILabel的字體大小
  3. 獲取UILabel的文本內容
  4. 根據上面的3部分數據,計算文本顯示區域大小
  5. 根據4計算的大小,實時改變UILabel的frame
code如下:

 

  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的行高自適應內容
這個和上面的類似,直接上Code:

 

- (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都可以做到自適應內容,根據內容多少自動換行,自動調整控件的位置和大小,達到最優的顯示效果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM