IOS学习之UITableView滚动到指定位置

通过下面tableview的代理实现

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated

UITableViewScrollPosition 相关枚举类型

typedef NS_ENUM(NSInteger, UITableViewScrollPosition) {
UITableViewScrollPositionNone,
UITableViewScrollPositionTop,
UITableViewScrollPositionMiddle,
UITableViewScrollPositionBottom
}; // scroll so row of interest is completely visible at top/center/bottom of view

枚举中有上中下,根据需求选取,下面是我在使用时遇到的问题在iOS11中我选取的枚举是UITableViewScrollPositionMiddle,tableview会出现跳动的现象,最后加了下面三个方法

self.leftMenuTableView.estimatedRowHeight = 0;
self.leftMenuTableView.estimatedSectionHeaderHeight = 0;
self.leftMenuTableView.estimatedSectionFooterHeight = 0;

完美解决

简而言之estimatedRowHeight是一个预估高度,iOS11之前是为0,在iOS11下,这个值默认为44。

那么我们可以得出结论,当你的实际高度大于预估高度的时候,会按照预估高度下的cell的数量来计算contentSize,当实际高度小于预估高度的时候,会按照实际高度下的cell的数量来计算contentSize。

如果我们要回到iOS11之前的效果,我们可以让estimatedRowHeight=0,关闭这个预估高度的效果。

延展

为什么使用MJRefresh在iOS11下要让estimatedRowHeight=0,因为MJRefresh底部的上拉刷新是根据contentSize来计算的,当数据更新的时候,得出来的contentSize只是预估的。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 相信大家都已经升级了iOS11,而且也做了相应的适配,其中对于tableView这个控件进行适配的时候,比如:集成...
    浩成哥哥阅读 3,477评论 0 0
  • 我们在上一篇《通过代码自定义不等高cell》中学习了tableView的相关知识,本文将在上文的基础上,利用sto...
    啊世ka阅读 5,423评论 2 7
  • 相信大家都已经升级了iOS11,而且也做了相应的适配,其中对于tableView这个控件进行适配的时候,有很多情况...
    腾讯课堂八点钟学院阅读 12,432评论 0 6
  • 前言 苹果WWDC开发者大会上,终于发布了大家期待已久的iOS 11,有些新特性功能确实出人意料。不过大的方面苹果...
    Mr_Say_Yes阅读 8,646评论 6 15
  • 自你离开,我的生活便简单的不得了。我把自己沉浸在一个自认为的孤独封闭的世界,没有阳光,没有雨露,也没有问候。与其他...
    扶北阅读 1,279评论 0 0

友情链接更多精彩内容