为什么insertRowsAtIndexPaths总是导致TableView滚动到顶部?

Mat*_*266 5 uitableview ios swift

几个小时以来我一直在讨论这个问题,但每次我尝试这样的事情:

    self.dataArray.append(newCellObj)
Run Code Online (Sandbox Code Playgroud)

然后我这样做:

    self.tableView.beginUpdates()
    self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)
    self.tableView.endUpdates()
Run Code Online (Sandbox Code Playgroud)

UITableView将自动滚动到页面顶部.

即使我尝试:

    self.tableView.scrollEnabled = false
    self.tableView.beginUpdates()
    self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)
    self.tableView.endUpdates()
Run Code Online (Sandbox Code Playgroud)

即使滚动完全禁用,UITableView仍将滚动到顶部.是什么原因导致ScrollView在insertRowsAtIndexPaths调用之后滚动到顶部?

我对此问题的唯一解决方案是使用此方法:

    self.tableView.reloadData()
Run Code Online (Sandbox Code Playgroud)

代替.如果我使用reloadData而不是它很好,但是我失去了我真正想保留的漂亮动画.

我也有,self.tableView.scrollsToTop = false并且我已经尝试了许多其他配置,可能会以某种方式禁用滚动,但是,有一些事情在这之后覆盖了insertRowsAtIndexPaths

Ili*_*rim 14

我遇到了与OP相同的问题.另外,有时候我的一些桌面视图单元格会"空白"并完全消失,这引出了我这个相关的问题.

对我来说,解决方案是执行以下操作之一:

  • 实行 func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
  • 禁用自动布局
  • 设置一个更准确estimatedRowHeight的我UITableView

  • 谢谢!`estimatedHeightForRowAtIndexPath`似乎完全解决了这个问题!它似乎更多地是"索引路径上的行的最大高度",当我将此值设置为远远高于我的tableView中的平均单元格时,似乎已经完成了这一操作.我也能够保持"自动布局"的开启!:DI在我的项目中有几个这样的"更新表视图"函数,每个函数处理一个完全不同的单元格类,并且estimatedHeight技巧修复了每一个单元.我猜的替代方法是手动heightForRowAtIndexPath. (3认同)