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只是预估的。

你可能感兴趣的:(IOS学习之UITableView滚动到指定位置)