该篇文章主要介绍一个实现聊天界面的思路过程,源码可以在 源码链接 获得,该工程实现聊天的基本功能,功能还不够完善,欢迎大家提PR,效果图如下所示


我希望通过相对简单的方式实现界面的布局,没有复杂的计算达到自适应的效果。
iOS8新功能介绍
虽然self size cell最终没有在我的工程中用到,但是这是我曾经挖过的坑,所以在此做了简单的介绍。
在iOS 8 中,UITableView新增一项功能 self size cells,这是一项通过 UITableViewCell 的约束自动自动计算UITableView contentSize 的技术。这个新特性给我们带来两个个好处。
我们不再需要为了自适应文字,去计算每个cell 中文字所需要的高度。 而且有更高的性能。(因为UITableView每次reloadData的时候都会重新计算 cell 的高度,意味着如果有1万个 cell 要展示,需要 调用heightForRowAtIndexPath一万次,这效率是特别低的)我们通过一个简单的demo来介绍一下 Self Size Cells 的用法,demo 源码
效果如图

使用步骤是
为UITableViewCell添加约束 设置UITableView 的estimatedRowHeight属性 设置 rowHeight为 UITableViewAutomaticDimension 有一点需要注意,代码中不能实现heightForRowAtIndexPath 这个方法添加约束,有一个原则是,除了自适应text的高度不需要约束外,需要确定所有必要约束

用代码来说就是(这里用到第三方库 SnapKit 做代码约束 SnapKit 传送门)
textview.snp_makeConstraints{ (make)in
make.top.equalTo(self.contentView).offset(15)
make.width.equalTo(100)
make.left.equalTo(self.contentView).offset(15)
make.bottom.equalTo(self.contentView).offset(-15)
}
对于UILabel 来说还需要把numberOfLines置为0
然后设置UITableView的必要属性
messageTable.estimatedRowHeight=44
messageTable.rowHeight=UITableViewAutomaticDimension
以上便是,使用self size cell 的所有步骤。
实战篇
接下来便是实战部分,我希望在聊天页面中使用self size cell 这个功能,聊天页面的效果图










