問題時endUpdates:當我在UITableView
的底部(且僅當在底部)和tableView.beginUpdates()
/tableView.endUpdates()
被調用時,UITableView
跳了一點點。我不希望它這樣做。UITableView的跳起來之後開始/使用UITableViewAutomaticDimension
設置:我有UITableViewCells
將全部在不同尺寸的一個UITableView
,和我使用UITableViewAutomaticDimension
大小的細胞。
例: 當我在UITableView
的底部,我選擇單元格,隨後調用tableView.beginUpdates()
/tableView.endUpdates()
,該UITableView
滾動/跳起來只是有點。
有沒有人找到一種方法,使其在 tableView.beginUpdates()
/tableView.endUpdates()
之後沒有任何jump?,而在UITableView
的末尾?
對於目前我手動計算我所有的UITableViewCells
,我寧願不這樣做,因爲我想利用UITableViewAutomaticDimension
。
代碼:
下面是一些代碼,顯示發生的事情tableView.beginUpdates()
之間/ tableView.endUpdates()
:我的viewWillAppear中
tableView.beginUpdates()
cell!.setNeedsUpdateConstraints()
cell!.updateConstraintsIfNeeded()
cell!.setNeedsLayout()
cell!.layoutIfNeeded()
tableView.endUpdates()
:
public override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.tableView.estimatedRowHeight = 150.0
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.reloadData()
//Bug in 8.0+ forces us to call three extra methods to get dynamic cell heights to work correctly...
self.tableView.setNeedsLayout()
self.tableView.layoutIfNeeded()
self.tableView.reloadData()
}
我heightForRow:
public override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
更新:從tableView.beginUpdates()
/tableView.endUpdates()
刪除cell!.setNeedsUpdateConstraints()
,cell!.updateConstraintsIfNeeded()
,cell!.setNeedsLayout()
和cell!.layoutIfNeeded(
)似乎停止了跳動,但後來我的細胞不會進行調整?
編輯:這隻發生時在UITableView
的底部。
我想提一提,我已經目睹了這兩個'的iOS 8'和'的iOS 9'。顯示一些代碼可能是 – Sakiboy
?因爲我使用beginUpdates()/ endUpdates()時從來沒有tableView跳轉,我很好奇它們內部正在做什麼。 –
增加了一些代碼,它是所有非常基本的「通過本書」代碼,雖然... – Sakiboy