IOS 聊天界面(自适应文字)的实现

2020-01-18 21:41:18于丽

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

 ios,聊天界面,聊天界面实现

ios,聊天界面,聊天界面实现

我希望通过相对简单的方式实现界面的布局,没有复杂的计算达到自适应的效果。

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 源码

效果如图

 ios,聊天界面,聊天界面实现

使用步骤是

为UITableViewCell添加约束 设置UITableView 的estimatedRowHeight属性 设置 rowHeight为 UITableViewAutomaticDimension 有一点需要注意,代码中不能实现heightForRowAtIndexPath 这个方法

添加约束,有一个原则是,除了自适应text的高度不需要约束外,需要确定所有必要约束

 ios,聊天界面,聊天界面实现

用代码来说就是(这里用到第三方库 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 这个功能,聊天页面的效果图