我有一个UITableView
,由于某些原因,我在ViewDidLoad
中设置了contentInset.top
和contentOffset.y
tableView.contentInset.top = 150
tableView.contentOffset.y = -150
这个概念是,当它被打开时,行从顶部开始-150点,当滚动开始时,行首先回到顶部,然后实际滚动开始(新单元格从底部出现,旧单元格在顶部消失)。
唯一的问题是,当UITableView
上没有足够的单元格时,它不会滚动到顶部。我实际上不关心实际的滚动开始(新单元格从底部出现,旧单元格在顶部消失),我希望在任何情况下,对于任何数量的单元格,表格视图都像这样滚动到顶部:
tableView.contentInset.top = 0
tableView.contentOffset.y = 0
然后当没有足够的单元格时,它就不会进行实际的滚动。有什么方法可以做到这一点吗?
顺便说一句,我使用scrollViewDidScroll来平滑地上下移动它,当没有足够的单元格时想这样做
非常感谢
1条答案
按热度按时间k7fdbhmy1#
您要做的是,如果生成的行高小于表视图框架的高度,则设置表视图的
.contentInset.bottom
。我们将从一个简单的动态高度单元格(多行标签)开始:
以及具有表格视图的基本控制器,从每侧插入40个点:
运行时如下所示:
不过,到目前为止,它处于您当前的状态--我们无法向上滚动到顶部。
我们需要做的是找到一种方法来设置表视图的
.contentInset.bottom
:因此,我们将实现
scrollViewDidScroll(...)
:现在,当我们运行它时,我们可以“滚动到顶部”:
将控制器顶部的
testRowCount
从5更改为6、7、8、20、30等。一旦有足够的行(或行更高),表格视图就可以滚动到顶部,* 无需 *.contentInset.bottom
,我们就可以在保持150点顶部插图的同时进行“正常”滚动。值得注意的是:上面的
scrollViewDidScroll
代码将在每次滚动表格时运行。理想情况下,我们只会让它运行,直到我们确定了底部偏移量(如果需要的话)。为此,我们需要一些新的var属性和一些
if
测试。下面是另一个版本的控制器,一旦我们知道需要什么,它就会停止测试: