添加单元格后,iOS UITableView不会滚动

时间:2013-08-03 01:53:34

标签: iphone ios ipad uitableview

我有一个UITableView代表游戏中可玩的回合。首次启动时,tableView中只显示两个单元格。当用户击败级别时,会向tableView添加越来越多的行。每次显示tableView时都会重新加载数据(每次用户击败一个级别时都会发生这种情况)。

一旦tableView包含足够的单元格以要求滚动,tableView将不会滚动以及用户离开它的位置。它将滚动显示单元格位于下方,但当用户松开手指时,tableView会反弹,不允许用户与需要滚动查看的单元格进行交互。完成另一个级别并返回到tableView后,视图将正确滚动。

当存在滚动问题时,就好像tableView没有意识到它足够大以至于需要滚动,所以它会反弹回原来的位置,尽管事实上当下面有一些单元显示在下方时用户尝试滚动。

我没有在tableView的委托中实现heightForRowAtIndexPath或heightForHeaderInSection方法,所以不应该干扰。我搜索过这个网站和谷歌的类似问题,并尝试过一些事情,包括设置contentSize,但都没有成功。

是否有任何理由缺乏滚动?或者,更重要的是,有没有办法解决它?谢谢!

编辑: 我看到一些关于框架的评论。我记录了表所在视图的框架,tableView本身的框架,以及table i所在视图的viewDidAppear方法中的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,但滚动行为并不反映这一点。

2 个答案:

答案 0 :(得分: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.

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

答案 1 :(得分:-1)

 self.tableview.scrollEnable=YES;//Paste this line where initialized UITableView.