use*_*616 9 objective-c uitableview ios
嗨,我要给你链接一个展示我的问题的视频,因为它有点难以传达. UITableView没有滚动到底部 在视频中我点击了一个按钮,它将项目添加到列表中.请注意,我没有在第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];
Run Code Online (Sandbox Code Playgroud)
主要问题是在视频结束时,我滚动到最后几个项目,但我无法选择它们.显然这个问题必须处理UITableView的高度.我试过在故事板编辑器中更改它,但它没有做任何事情.有任何想法吗?提前致谢!
Nic*_*son 22
从我所看到和评论好吧,我认为这是可能是你的高度UITableView比设备的屏幕尺寸,这意味着因为项目还没有到达底部也不会向下滚动较大UITableView的UIScrollView.
转到IB并设置约束,使其UITableView等于视图控制器的宽度和高度.
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];
});
Run Code Online (Sandbox Code Playgroud)
此外,您不应该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];
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13491 次 |
| 最近记录: |