【发布时间】:2013-08-03 01:53:33
【问题描述】:
我有一个 UITableView 代表游戏中的可玩回合。在第一次启动时,tableView 中只显示了两个单元格。随着用户通过关卡,越来越多的行被添加到 tableView。每次显示 tableView 时我都会重新加载数据(每次用户通过关卡时都会发生这种情况)。
一旦 tableView 包含足够的需要滚动的单元格,tableView 将不会滚动以及用户离开它的位置。它会滚动显示单元格在下方,但是当用户松开手指时,tableView 会弹回,不允许用户与需要滚动查看的单元格进行交互。完成另一个关卡并返回 tableView 后,视图将正常滚动。
当存在滚动问题时,好像 tableView 没有意识到它足够大以至于需要滚动,所以它会弹回原来的位置,尽管事实上当下面有单元格显示时用户尝试滚动。
我没有在 tableView 的委托中实现 heightForRowAtIndexPath 或 heightForHeaderInSection 方法,因此不应该产生干扰。我已经在这个网站和谷歌上搜索过类似的问题,并尝试了一些方法,包括设置 contentSize,但都没有成功。
没有滚动有什么原因吗?或者,更重要的是,有没有办法解决它?谢谢!
编辑: 我看到一些 cmets 询问框架。我在我所在的视图的 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 大,但滚动行为并没有反映这一点。
【问题讨论】:
-
请发布一些代码。你在某处编辑表格视图的框架吗?还是使用 tableView 的 contentInset?
-
我正在使用自动布局并且没有设置框架。我没有设置 tableView 的 contentInset。我认为代码中没有发生任何特殊情况会导致这种情况,或者我可以发布的任何代码都会有用。我正在实现普通的委托方法。我在 IB 中布置 tableView。我无法想象任何 IB 约束会导致这样的滚动问题。
-
请发布代码 - 否则任何人几乎都不可能对您的问题给出有意义的答案。
-
在重新加载数据的位置设置断点,并在 Xcode lldb/gdb 控制台中执行
po <your table view variable name>。这将告诉您 tableview 的框架是什么,这将帮助我们找出您的问题。 -
我认为您的 tableView 框架 y 尺寸大于您的视图框架 y 尺寸。
标签: iphone ios ipad uitableview