本篇文章主要给大家介绍了ios11中estimatedRowHeight属性的用法和知识,有兴趣的朋友学习下。
相信大家都已经升级了iOS11,而且也做了相应的适配,其中对于tableView这个控件进行适配的时候,比如:集成MJRefresh的时候,当然还有其他很多情况下,很多资料都有说需要把estimatedRowHeight属性设置为0,那么它到底是什么,为什么要这么来做,我们来探究下。
什么是estimatedRowHeight?
-(NSInteger)tableView:(UITableView )tableView numberOfRowsInSection:(NSInteger)section{ return 100; } `
-(CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexPath )indexPath{ return 50; }
-(void)scrollViewDidScroll:(UIScrollView )scrollView { NSLog(@”table ContentSize %@”,
NSStringFromCGSize(scrollView.contentSize)); }
-(CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexPath )indexPath{
return 30;
}
结果我们可以看到下图,初始高度为100 * 44=4400
table ContentSize {375, 4400}
当我往下拉(往下不是往上),不会出现新的cell,仅仅是为了触发scrollViewDidScroll这个方法来打印出下面语句来
table ContentSize {375, 4092}
按照例子一的解释,我们计算下:4400 -(44-30)15= 4190 !!它又是怎么来的呢?经过调试,我们发现它调用了heightForRow这个方法22次,也就是目前显示在屏幕上的可见cell数量,按照这个,确实符合:4400 -(44-30)22= 4092。同样的,当你往上滑动,出现新的cell的时候,contentSize的高度会减去(44-30)
总结
那么我们可以得出结论,当你的实际高度大于预估高度的时候,会按照预估高度下的cell的数量来计算contentSize,当实际高度小于预估高度的时候,会按照实际高度下的cell的数量来计算contentSize。
如果我们要回到iOS11之前的效果,我们可以让estimatedRowHeight=0,关闭这个预估高度的效果。
延展
为什么使用MJRefresh在iOS11下要让estimatedRowHeight=0,因为MJRefresh底部的上拉刷新是根据contentSize来计算的,当数据更新的时候,得出来的contentSize只是预估的。
本文标题为:详解ios11中estimatedRowHeight属性
- Android实现轮询的三种方式 2023-02-17
- 详解flutter engine 那些没被释放的东西 2022-12-04
- 最好用的ios数据恢复软件:PhoneRescue for Mac 2023-09-14
- Android MaterialButton使用实例详解(告别shape、selector) 2023-06-16
- Flutter实现底部和顶部导航栏 2022-08-31
- Android实现监听音量的变化 2023-03-30
- Android studio实现动态背景页面 2023-05-23
- SurfaceView播放视频发送弹幕并实现滚动歌词 2023-01-02
- iOS 对当前webView进行截屏的方法 2023-03-01
- 作为iOS开发,这道面试题你能答出来,说明你基础很OK! 2023-09-14
