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

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

self size cell 主要给我们带来两个好处

能够得到更高的执行效率 我们不需要为文字的frame进行复杂的计算 ,只需要设置width的约束和位置,就能够得到自适应的Size

由于messageTable 消息的展示是通过分页加载消息的方式,第一次只会添加20条的消息,也就不会出现调用heightForRowAtIndexPath时间过长的卡顿问题。但是如果用户不断的下拉刷新heightForRowAtIndexPath的执行时间也会出现线性的增加,所以为了减少这方面的时间开支,我们在每次成功加载一个新的cell 的时候把高度缓存起来,这样就可以减少计算的时间,每次只需要计算新展现的历史消息高度就可以了。

第一个问题经过分析我们可以通过缓存高度的方式提高性能. 对于第二点,也是最重要的一点,如何不通过手动计算获得UITableViewCell所需要的高度,经过分析发现UITableViewCell 有一个方法systemLayoutSizeFittingSize可以计算返回自身的高度,所以我接下来生成一个全局的UITableViewCell 用于计算UITableViewCell 的高度这样我们就不需要手动计算Cell的高度了。通过messageCell.systemLayoutSizeFittingSize(CGSizeZero).height + 1//这里的 +1 是为了弥补分隔线的高度

返回的高度就是UITableView所需要的高度。

自适应输入框

接下来,我们需要实现如下图的效果,输入框能够自适应输入文字的大小JChatInputView

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

我们需要输入框能够自适应文本的大小,我们

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

需要给TextView 添加如下约束


inputTextView?.snp_makeConstraints(closure: { (make) ->Voidin
 make.right.equalTo(self.showMoreBtn.snp_left).offset(-5)
 make.left.equalTo(self.switchBtn.snp_right).offset(5)
 make.top.equalTo(inputWrapView).offset(5)
 make.bottom.equalTo(inputWrapView).offset(-5)
 make.height.greaterThanOrEqualTo(30)
 make.height.lessThanOrEqualTo(100)
})

inputWarpView 添加如下约束。不需要添加高度约束, 因为inputWarpView的高度由TextView 的高度和其他约束计算得出


inputTextView?.snp_makeConstraints(closure: { (make) ->Voidin
 make.right.bottom.left.equalTo(superView)
})

到此介绍了一个聊天界面的自适应UI部分,灵活的使用约束可以减少大量的代码。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持ASPKU!


注:相关教程知识阅读请移步到IOS开发频道。