UITableView带表头点击TOP按钮无法滚动至表头问题求助
解决UITableView点击TOP按钮无法滚动到表头的问题
嘿,我懂你碰到的这个糟心事——用setContentOffset:CGPointMake(0, 0)只能滚到第一个section,看不到tableView的表头,对吧?这其实是因为你的tableView大概率受到了安全区域、导航栏或者自动调整inset的影响,直接设(0,0)并不等于表头的真正顶部位置。
给你两个靠谱的解决方案:
方案一:考虑adjustedContentInset(推荐iOS11+)
从iOS11开始,UITableView新增了adjustedContentInset属性,它会自动计算安全区域、导航栏等带来的额外偏移量。你只需要把偏移量设为负的top inset值,就能精准滚到表头顶部:
[self.tableView setContentOffset:CGPointMake(0, -self.tableView.adjustedContentInset.top) animated:YES];
如果你的项目还要兼容iOS11之前的版本,可以改用contentInset:
[self.tableView setContentOffset:CGPointMake(0, -self.tableView.contentInset.top) animated:YES];
方案二:直接滚动到表头的frame范围
如果你的tableView确实设置了表头,也可以直接让tableView滚动到表头的可见区域,这个方法更直观,不需要手动计算偏移:
if (self.tableView.tableHeaderView) { [self.tableView scrollRectToVisible:self.tableView.tableHeaderView.frame animated:YES]; }
为什么原来的代码不行?
当你的tableView嵌入在导航栏或使用安全区域时,系统会自动给tableView添加contentInset。此时contentOffset为(0,0)对应的位置其实是第一个section的顶部——因为表头被inset的top值“推”到了屏幕外上方。所以必须抵消这个inset的影响,才能让表头完全显示在屏幕顶部。
内容的提问来源于stack exchange,提问作者Nipun Arora
相关产品推荐
相关产品推荐

