背景:

相信很多朋友都遇到过,文本的内容长度不一,需要根据内容的多少来自动换行处理。
场景:
很多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都可以做到自适应内容,根据内容多少自动换行,自动调整控件的位置和大小,达到最优的显示效果。

最新文章

  1. ASP.NET Identity 2新增双重认证、帐号锁定、防伪印章功能并修复了一些bug
  2. 手机端布局rem 与vm的使用
  3. iOS--归档和解档(Archiver)、(UnArchiver)
  4. jQuery图片渐变特效的简单实现
  5. SSH+Oracle10G抛Disabling contextual LOB creation as createClob() m
  6. Trie树|字典树(字符串排序)
  7. 2.2Bind建立配置文件和实体的映射「深入浅出ASP.NET Core系列」
  8. c#枚举描述
  9. VS2017 + QT5 + C++开发环境搭建和计算器Demo测试
  10. Apache Commons Digester 三(规则注解)
  11. LeetCode(48):旋转图像
  12. os.walk() 目录生成器
  13. 20181017 PL/SQL 记录
  14. 2017中国人工智能公司榜单发布,颠覆AT的AI独角兽全在这
  15. Codeforces 338 D. GCD Table
  16. 〖Linux〗bash和expect执行ssh命令行sshcmd.exp
  17. [转发] win8安装mindget mindmanger
  18. 2-Tenth Scrum Meeting20151210
  19. STL - 容器 - 运行期指定排序准则
  20. 【Linux学习笔记】Linux C中内联汇编的语法格式及使用方法(Inline Assembly in Linux C)

热门文章

  1. Swift中enum, struct, class的有关使用方法
  2. 我的代码-random forest
  3. java根据ip地址获取详细地域信息的方法
  4. 新学了几个python模块,不是很鸡肋。
  5. C++ 基于凸包的Delaunay三角网生成算法
  6. 2-Add Two Numbers @LeetCode
  7. mysql 生成时间序列数据 - 存储过程
  8. Python闭包举例
  9. SQL语句整理2
  10. python之 自动补全 tab