1

我有一个 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 大,但滚动行为并没有反映这一点。

4

2 回答 2

0

UITableViewDelegate 协议符合 UIScrollViewDelegate,因此您只需在 UITableViewDelegate 实现中直接实现方法 -scrollViewWillBeginDragging 和 -scrollViewDidScroll ,如果实现类设置为 UITableView 的委托,它们将被自动调用。

因此,在这些方法中,您可以实现与显示 tableView 内容相关的逻辑。就像假设您在滚动时所说的那样,它应该显示新单元格,即当时必须隐藏最上面的单元格。您可以在上述方法中编写逻辑,

//set your content of tableview to show new cell each time.

或者对于滚动方向,你有方法 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView,

// you can set here start and end coordinates and change them accordingly when scroll decelerates.

以这种方式编写代码不会使滚动反弹。你会得到完美的结果。希望这可以帮助。

于 2013-08-04T07:43:12.797 回答
-1
 self.tableview.scrollEnable=YES;//Paste this line where initialized UITableView.
于 2013-08-03T03:59:08.213 回答