挿入/削除アニメーションコールの実行後にUITableViewのコンテンツサイズが更新されると、気になります。アニメーションが完了していなくても、フレームサイズ/コンテンツサイズが直ちに更新されるという点で、ほとんどの[UIView animation ...]ブロックと思っていましたが、そのようには見えません。何か案は?いつ行挿入/削除アニメーションでUITableViewコンテンツサイズが更新されるのですか?
答えて
コンテンツのサイズは高さについてのデリゲートを呼び出した後に変更されます:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
お返事ありがとうございます。とにかく私に通知することができますか、またはコンテンツのサイズが変更されたことを教えてくれるデリゲートメソッドの任意のタイプですか?アニメーションが完了した後に起こるようですが、前もってテーブルの周りにアニメーションを作成できるように、新しいコンテンツサイズを取得したいと考えています。 – SLEW
tableview:heightForRowAtIndexPath:メソッドとコンテンツサイズが更新されるのを見ていませんでした。しかし、これはコンテンツのサイズを計算するためのソリューションにつながりました。ソリューションを別の回答として投稿します。 – Daren
残念ながら、私はどちらかのUITableViewから行を削除/追加するときcontentSizeを更新するための良い方法を見つけることができませんでしたが、あなたが追加/削除しているセルのインデックスパスを知っているなら、それが何であるかを計算する方法を見つけました。
変更された行のインデックスパスを使用すると、tableView:heightForRowAtIndexPath:メソッドを使用してそれぞれのセルの高さを計算し、それをテーブルビューの現在のコンテンツサイズの高さに追加できます。あなただけの1行を追加している場合はここでの例です:それは、sizeThatFits()
のように見える
[self.tableView insertRowsAtIndexPaths:@[indexPathOfNewRow] withRowAnimation:UITableViewRowAnimationAutomatic];
CGFloat newCellHeight = [self tableView:self.tableView heightForRowAtIndexPath:indexPathOfNewRow];
CGFloat newContentSizeHeight = self.tableView.contentSize.height + newCellHeight
保留中の新しいcontentSize
の高さを公開することができます。その保留中のサイズを割り当てることで、スクロールアニメーションの早期解決を図ることができます。新しいを使用して(
tableView.insertRows(at: [newIndexPath], with: .none)
tableView.scrollToBottom(animated: true)
とすべての方法下にテーブルのスクロールを持っています。このようなもので
:
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)
}
}
私はこのようなビューコントローラコードを記述することができますよコンテンツサイズ)を2行目から最後の行までスクロールする代わりに(古いコンテンツサイズを使用して)
- 1. UITableViewで行挿入アニメーションをスローダウン
- 2. SQL Serverトリガーで挿入、更新、削除された行をコピーする方法
- 3. 削除、更新または挿入後にDataGridViewが更新されない
- 4. 行が削除されると、UITableViewは更新されません
- 5. 別の行削除アニメーションの後に行を挿入する
- 6. Plpgsqlが更新の代わりに削除と挿入されているようです - なぜですか?
- 7. WPF DataContextのSQL更新、削除、挿入
- 8. 挿入/更新/削除後のsqlalchemyフラスコ
- 9. DataGridViewの更新/削除/挿入
- 10. Androidの挿入/更新/削除SQLiteクエリ
- 11. iPhone SDK:新しい行でUITableViewを挿入して更新する
- 12. セルの挿入と削除に関するUITableViewのアニメーションの問題
- 13. 更新されたデータの挿入と削除
- 14. Oracle sqlのマージで挿入および削除が行われますが、更新はされません
- 15. ログにはmysqlクエリの挿入、更新、削除のみが行われます
- 16. UITableViewのコンテンツサイズが変更される理由
- 17. 更新が更新または挿入で行われたか
- 18. 行の挿入と行の削除を同時に行います。 UITableView
- 19. UITableView:削除後に「行数」が更新されないのはなぜですか?
- 20. DB2 - 特定のタイムスタンプからレコードが挿入/更新/削除されたフェッチ・テーブル
- 21. オーバラップセルとカスタム挿入アニメーションと削除アニメーションを持つUICollectionView
- 22. 新しい行を挿入する前に行を削除
- 23. LINQロードマップに更新/削除/挿入がありますか?
- 24. asp.netでSQLデータから画像を挿入/更新/削除
- 25. UITableView行を挿入すると無効な更新
- 26. SQLiteの挿入行が自動的に削除される
- 27. Apache IgniteでのSQLの挿入、更新、削除のクエリ
- 28. 複数のテーブルでの関係の挿入、更新、削除
- 29. 挿入、更新または削除を行ったスキーマ
- 30. API Rest Asp Core 1.1での更新/挿入/削除のリターン
これを解決しましたか?私は同じ問題にぶつかっています。行を挿入/削除すると、tableView.contentSizeが更新されると予想されますが、それは非同期であるようです。 – VaporwareWolf