UITableView没有滚动到底部

时间:2014-01-27 00:49:42

标签: ios objective-c uitableview

您好我将链接到一个展示我的问题的视频,因为它有点难以传达。 UITableView not scrolling to bottom 在视频中,我点击一个按钮,将项目添加到列表中。请注意,我没有在第16项停止,并且我仍然在列表中添加了更多未显示的项目。最后,添加新项目后,列表将自动向上滚动

[_items addObject:[NSString stringWithFormat:@"Trawl %d", count]];

[self.tbl reloadData];

[self.tbl scrollToRowAtIndexPath:[NSIndexPath indexPathForItem:self.items.count - 1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];

主要问题是在视频结束时,我滚动到最后几个项目,但我无法选择它们。显然这个问题必须处理UITableView的高度。我试过在故事板编辑器中更改它,但它没有做任何事情。有任何想法吗?提前谢谢!

3 个答案:

答案 0 :(得分:22)

根据我所看到的以及评论,我认为UITableView的高度可能大于设备屏幕尺寸,这意味着它不会向下滚动,因为项目没有到达UITableView的{​​{1}}的底部。

转到IB并设置约束,以使UIScrollView等于视图控制器的宽度和高度。

答案 1 :(得分:6)

调用它时,reloadData很可能无法完全执行,因为它假设您可能会进行更多更改并告诉它再次重新加载。

尝试引入零秒延迟,让它有机会运行:

[_items addObject:[NSString stringWithFormat:@"Trawl %d", count]];

[self.tbl reloadData];

double delayInSeconds = 0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
  [self.tbl scrollToRowAtIndexPath:[NSIndexPath indexPathForItem:self.items.count - 1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
});

此外,在这种情况下,您不应该使用reloadData。这是应该添加行的方式:

[_items addObject:[NSString stringWithFormat:@"Trawl %d", count]];

[self.postsTableView beginUpdates];
[self.postsTableView insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:_items.count - 1] withAnimation:NSTableViewAnimationEffectNone]; // maybe you want some other animation here
[self.postsTableView endUpdates];

double delayInSeconds = 0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
  [self.tbl scrollToRowAtIndexPath:[NSIndexPath indexPathForItem:self.items.count - 1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
});

答案 2 :(得分:0)

你们大多数人都错了。

应该是这样的:

[self.tbl scrollToRowAtIndexPath:[NSIndexPath indexPathForItem:self.items.count - 1 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];

也就是说,应该是UITableViewScrollPositionTop,而不是UITableViewScrollPositionBottom。这里atScrollPosition:UITableViewScrollPositionTop是变化的起源,而不是目的地。