2017-07-06 13 views
0

私は、フレームに収まるよりも多くの行を含むtableview(スタイル - グループ化)を持っているので、最後の行を見るためにスクロールする必要があります。最後の行を削除すると、tableviewはその内容をスクロールして、最後の新しい行がフレームの一番下にあるようにします。最後のセルを削除した後にuitableviewがスクロールしないようにする

最後の行を削除した後、UITableViewがスクロールしないようにするにはどうすればよいですか?私はそれが空のスペースを維持し、自動的にスクロールしないようにします。

私はコンテンツのインセットを設定しようとしましたが、残念なことにスクロールを防止していないようです。

EDIT:行を除去するためのマイコード:

func removeLastRow() { 
    let indexPath = IndexPath.init(row: self.messages.count - 1, section: 0) 

    self.messages.removeLast() 
    CATransaction.begin() 
    self.tableView.beginUpdates() 
    CATransaction.setCompletionBlock {() -> Void in 
     // do stuff, add new rows 
    } 
    self.tableView.deleteRows(at: [indexPath], with: .left) 
    self.tableView.endUpdates() 
    CATransaction.commit() 
} 
+0

お次はどうしたいん...あなたは* *空きスペースを残して、行を削除することができますと仮定すると?ユーザーがテーブルを下にスクロールできる場合は、行がある空のスペースを維持*する*にバックアップしますか?それとも、一時的に空のスペースにしたいのですか?ユーザーが「新しい最下位行」をスクロールすると、**は最下行ですか? – DonMag

+0

@DonMag空欄を空にしておきたい。インセットのように。私は最終的にインセットを削除し、別の行を挿入します。しかし、もし私がしなければ - 空きスペースは空のままです。したがって、ユーザーが下にスクロールして「新しい最終行」を「本当の最後」にしなければならない複雑なケースはありません。 – iur

+0

*最後の行を*削除する代わりに*空白のセルに置き換えますか? – DonMag

答えて

0

細胞がtableView:heightForRowAt:を呼び出すことにより、削除する前に、サイズおよび削除した後、手動で現在のオフセット垂直コンテンツへのテーブルビューの垂直オフセット内容を設定盗ん、セルの高さに加えて。その後

let deletedCellHeight = tableView.heightForRowAt(indexPath) 

tableView.contentOffset.x += deletedCellHeight 
+0

これは残念ながらアニメーションでは機能しません。今はアニメーションの下にスクロールするのではなく、ジャーキーなコンテンツを取得します。 – iur

+0

アニメーションとして.noneを使用し、コンテンツオフセット設定で実行できるカスタムアニメーションブロックを実装する必要があります。 – the4kman

+0

ええと、あなたはオフセットを維持しながら行削除アニメーションを偽ることを提案しますか?私はより簡単な方法を見つけることを望んでいた:( – iur

関連する問題