您的位置:首页 > 移动开发 > IOS开发

iOS autolayout自适应cell高度时使用estimatedRowHeight的一些问题

2018-03-23 09:43 507 查看
estimatedRowHeight是一个预估高度,再iOS11之前默认是0,也就是默认关闭,在iOS11下,默认44。再iOS11下也可以让estimatedRowHeight=0来关闭预估高度。
我们在使用masonry或者xib生成cell进行自适应高度的时候,会设置一个预估的高度estimatedRowHeight。

问题描述:

在项目中发现,在iOS11中,当estimatedRowHeight的高度设置小于实际的cell高度时,MJRefresh有时候滚动下拉加载更多会发生tableview的跳动问题,当estimatedRowHeight设置大于或者约等于cell的实际高度时,就不会产生跳动。在iO11之前的版本中不会出现这个问题。

问题解决:

        查博客发现,在iOS11中,滚动时会动态的根据cell高度估算tableview的contentsize。当你的实际高度大于预估高度的时候,会按照预估高度下的cell的数量来计算contentSize,当实际高度小于预估高度的时候,会按照实际高度下的cell的数量来计算contentSize。参考博客如果我们想避免跳动情况的话,可以设置预估高度大于或等于实际cell的高度,这样就是使用的cell的实际高度来计算contentsize。
如果使用的是自己计算cell高度的话,estimatedRowHeight可以设为0,以避免预估高度的影响。        当各种cell的高度差别较大时可以使用estimatedHeightForRowAtIndexPath方法,给每个cell设置预估高度。参考博客
如果是复杂的cell和界面的话,还是推荐自己计算cell的高度。建议使用SDAutoLayout自动计算高度,地址https://github.com/gsdios/SDAutoLayout
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息