私が正しくレイWenderlichガイドに基づいて動的な行の高さを有するように構成されたテーブルビューがhereを発見した:のUITableViewController:動的な行の高さと底部にスクロールすると、誤った位置にアニメーションを開始
Iは透明を有するように制約を設定しますセルの上端から下端までの制約線。私はまた、コンテンツの抱擁とコンテンツの圧縮抵抗の優先順位と推定行の高さを設定します。
これは、セットアップに私が使用するコードテーブルビューである:
func configureTableView() {
// its called on viewDidLoad()
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 100.0
}
override func viewDidLoad() {
super.viewDidLoad()
configureTableView()
for i in 1...20 {
messages.append([
"title": "foo \(i)",
"message": "bla \(i)\nbla\nbla"
])
}
// this is because the actual row heights are not available until the next layout cycle or something like that
dispatch_async(dispatch_get_main_queue(), {self.scrollToBottom(false)})
}
func scrollToBottom(animated:Bool) {
let indexPath = NSIndexPath(forRow: self.messages.count-1, inSection: 0)
self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: animated)
}
そして、これは私が新しい行を追加する方法である:デフォルトの行で
@IBAction func addMore(sender:UIBarButtonItem) {
let message = [
"title": "haiooo",
"message": "silver"]
messages.append(message)
let indexPath = NSIndexPath(forRow: messages.count-1, inSection: 0)
tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Bottom)
scrollToBottom(true)
}
設定が細かいです。これは、行とスクロールを期待通りに下部に追加します。
しかし、その後に新しい行を追加すると、スクロールが最後のセルの上から始まるようです。セルを増やすと、オフセットが増えるようです。 Imgur
それは確かにアニメーションをオフにすると、それは適切にスクロールするためのスクロールアニメーション(ないにinsertRowアニメーション)に関連しています:
は、ここでそれは起こっ示すGIFです。
estimatedRowHeight
を変更すると、スクロールオフセットが異なりますが、固定値が見つかりませんでした。
また、dispatch_async
を使用してスクロールを遅らせてみましたが、何も変更されませんでした。
あなたにはアイデアはありますか?
ビデオから、私は何が間違っているのかわかりません。そして、「スクロールが最後のセルの上から始まるように見える」ということを私は理解していません。明確にできますか?問題のあるサンプルプロジェクトを利用できるようにすることも役に立ちます。 –
Daveは、セル17と18がスクロールが開始されたときに画面上部に表示されている状態になっていることに注意してください。アニメーションを開始する前に画面が上に移動するように見えます。 ここでソースコードを見つけることができます:https://github.com/marcio0/ios-playground/tree/master/scrolltest –
OK、私はビデオでそれを見ることができます(私がそれをダウンロードしてフレームバイ-frame)。しかし、私はサンプルプロジェクトでそれを見ていません。私は別の電話機モデル(ただし9.2)を試してみましたが、アニメーションの速度を落とそうとしましたが、問題は見たことがありませんでした。 –