我一直在为这个问题敲打几个小时,但每次我尝试这样的事情:
self.dataArray.append(newCellObj)
然后我这样做:
self.tableView.beginUpdates()
self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)
self.tableView.endUpdates()
UITableView将自动滚动到页面顶部。
即使我尝试:
self.tableView.scrollEnabled = false
self.tableView.beginUpdates()
self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)
self.tableView.endUpdates()
即使滚动完全禁用,UITableView仍会滚动到顶部。究竟是什么原因导致ScrollView在调用insertRowsAtIndexPaths
后滚动到顶部?
我对这个问题的唯一解决方案就是使用它:
self.tableView.reloadData()
代替。如果我使用reloadData而不是它很好,但是我失去了我想要保留的漂亮动画。
我也有self.tableView.scrollsToTop = false
而且我尝试过许多其他可能会以某种方式禁用滚动的配置,但是,在insertRowsAtIndexPaths
答案 0 :(得分:13)
我遇到了与OP相同的问题。另外,有时候我的一些桌面视图单元格会出现空白"并完全消失,这导致我this related question。
对我来说,解决方案是执行以下操作之一:
func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
estimatedRowHeight
UITableView
答案 1 :(得分:1)
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewAutomaticDimension;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewAutomaticDimension;
}
// I'm use auto layout and this variant without animation works
// ...insert object to datasource
NSUInteger idx = [datasource indexOfObject:myNewObject];
if ( NSNotFound != idx )
{
NSIndexPath *path = [NSIndexPath indexPathForRow:idx inSection:0];
[self.table beginUpdates];
[self.table insertRowsAtIndexPaths:@[path]
withRowAnimation:UITableViewRowAnimationNone];
[self.table endUpdates];
[self.table scrollToRowAtIndexPath:path
atScrollPosition:UITableViewScrollPositionBottom
animated:NO];
}