我很好奇,當插入/刪除動畫調用後更新UITableView的內容大小。我認爲它會像大多數[UIView動畫...]塊一樣,即使動畫未完成,幀大小/內容大小也會立即更新,但似乎並非如此。有任何想法嗎?什麼時候UITableView內容大小更新與行插入/刪除動畫
9
A
回答
0
內容大小打來電話,詢問代表們的高度後改變:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
2
不幸的是,我一直沒能找到更新contentSize添加/從一個UITableView刪除行既可以當一個好方法,但如果您知道要添加/刪除的單元格的索引路徑,我的確找到了一種計算方法。
使用修改行的索引路徑,可以使用tableView:heightForRowAtIndexPath:方法計算各個單元格的高度,並將其添加到表視圖的當前內容大小高度。舉個例子,如果你只是添加一行:
[self.tableView insertRowsAtIndexPaths:@[indexPathOfNewRow] withRowAnimation:UITableViewRowAnimationAutomatic];
CGFloat newCellHeight = [self tableView:self.tableView heightForRowAtIndexPath:indexPathOfNewRow];
CGFloat newContentSizeHeight = self.tableView.contentSize.height + newCellHeight
1
它看起來像sizeThatFits()
可以公開的新contentSize
說的待處理的高度。然後,您可以分配該待處理的大小,以便及早解決滾動動畫。
像這樣的東西:
extension UIScrollView {
var pendingContentSize: CGSize {
var tallSize = contentSize
tallSize.height = .greatestFiniteMagnitude
return sizeThatFits(tallSize)
}
func scrollToBottom(animated: Bool) {
contentSize = pendingContentSize
let contentRect = CGRect(origin: .zero, size: contentSize)
let (bottomSlice, _) = contentRect.divided(atDistance: 1, from: .maxYEdge)
guard !bottomSlice.isEmpty else { return }
scrollRectToVisible(bottomSlice, animated: animated)
}
}
我能寫的視圖控制器代碼:
tableView.insertRows(at: [newIndexPath], with: .none)
tableView.scrollToBottom(animated: true)
,並有表一路滾動到底部(使用新的內容大小)而不是滾動到倒數第二行(使用舊的內容大小)。
相關問題
- 1. UITableView更改內容大小
- 2. 同時插入行和刪除行。 UITableView
- 3. 爲什麼數據庫在刪除和插入時更新行?
- 4. 更改UITableView動畫的持續時間(插入/刪除帶有表beginUpdates的行)
- 5. 插入/刪除行時更新表格
- 6. 什麼時候動畫幀?
- 7. UITableview插入/刪除
- 8. 將大行插入UITableView時的動畫假設高度錯誤
- 9. UITableView通過JSON更新,動畫行插入
- 10. 當從UITableView刪除行時刪除UITextField內容
- 11. mySQL:知道何時更新和什麼時候插入?
- 12. 在UITableView中,批次行插入/刪除的順序是什麼?
- 13. UITableView內容大小和行高
- 14. 動畫UITableView調整大小
- 15. UITableview調整動畫大小
- 16. 什麼時候更新DateTime.Now?
- 17. UITableView:爲什麼刪除後「行數」沒有被更新?
- 18. 什麼時候子類UITableView?
- 19. 插入行時UITableView抖動
- 20. UITableView的動態內容大小與高度自動版式
- 21. 如何在從UITableView插入和刪除行時正確更新數據源?
- 22. UIScrollView內容更改時更新UITableView
- 23. SQL更新,刪除並同時插入
- 24. 什麼時候更新和edittext更新?
- 25. 更新/刪除/插入DataGridView
- 26. IE8在插入內容時不重新計算div的大小
- 27. 減慢行插入動畫在UITableView
- 28. 用動畫插入UITableView?
- 29. 即使在重新加載時,UITableView內容大小也不會更新,當我動態更改其框架時
- 30. 更新基於UIScrollView的UITableView高度的內容大小
你解決了這個問題嗎?我遇到了同樣的問題。插入/刪除行然後期待tableView.contentSize被更新,但似乎是異步的。 – VaporwareWolf