我有一个 UITableView 代表游戏中的可玩回合。在第一次启动时,tableView 中只显示了两个单元格。随着用户通过关卡,越来越多的行被添加到 tableView。每次显示 tableView 时我都会重新加载数据(每次用户通过关卡时都会发生这种情况)。
一旦 tableView 包含足够的单元格需要滚动,tableView 将不会滚动以及用户离开它的位置。它会滚动显示单元格在下方,但是当用户松开手指时,tableView 会弹回,不允许用户与需要滚动查看的单元格进行交互。完成另一个关卡并返回 tableView 后,视图将正常滚动。
当存在滚动问题时,就好像 tableView 没有意识到它足够大以至于需要滚动,所以它会弹回到原来的位置,尽管当用户尝试滚动时下面会显示单元格滚动。
我没有在 tableView 的委托中实现 heightForRowAtIndexPath 或 heightForHeaderInSection 方法,因此不应该干扰。我已经在这个网站和谷歌搜索过类似的问题,并尝试了一些方法,包括设置 contentSize,但都没有成功。
这种缺乏滚动有什么原因吗?或者,更重要的是,有没有办法解决它?谢谢!
编辑:我看到一些关于框架的评论。我在表 i 所在视图的 viewDidAppear 方法中记录了表所在视图的框架、tableView 本身的框架以及 tableView 的内容大小。
以下是在需要滚动之前出现视图时的结果。滚动行为符合预期;用户可以滚动越过可见区域,它会反弹回来。
view.frame: {{0, 20}, {320, 460}}
tableView.frame: {{0, 145}, {320, 315}}
tableView.contentSize: {320, 308}
以下是需要滚动时出现的视图的结果。滚动将允许出现下面的单元格,但是当用户松开手指时,它会在不应该的时候反弹回来。
view.frame: {{0, 20}, {320, 460}}
tableView.frame: {{0, 145}, {320, 315}}
tableView.contentSize: {320, 352}
请注意, contentSize.height 确实更改了 44,因为它应该在添加新单元格后更改。contentSize.height 现在比 tableView.frame.height 大,但滚动行为并没有反映这一点。