iOS 9、Xcode 7、スウィフト 2.2
1 つの UIViewController を含む Storyboard があり、これには 1 つの UITableView が含まれます。
UITableView は、制約を使用して UIViewController のビューの端に固定されます。
設計要件
iPad でアプリを全画面表示モード (つまり、水平サイズと垂直サイズの両方のクラスでレギュラー) で使用する場合、テーブルビューの使用可能な幅に応じて、テーブルビューの余白を変更する必要があります。事実上、縦向きの場合、余白は 100 ポイントである必要がありますが、横向きの環境では 200 ポイントです。テーブルビューは、使いやすさのためにビュー領域全体を占める必要があります (例: スクロール、ビュー内の任意の場所でのジェスチャーのタップ)。
現在のアプローチ
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)
{
let margins: UIEdgeInsets
if (tableView.bounds.size.width < kWidthThreshold) {
margins = UIEdgeInsetsMake(0, 100, 0, 100)
} else {
margins = UIEdgeInsetsMake(0, 200, 0, 200)
}
cell.separatorInset = margins
cell.layoutMargins = margins
}
問題
アプリの起動後、ビューが正しく表示されます。デバイスの回転により、セルはデバイスの向き (または、より正確にはビュー幅の変更) の正しいマージンを尊重します。
しかし、テーブルビューをスクロールすると、新しく表示されるセルはマージンを尊重しません。それらのレイアウトは明らかにランダムな方法で壊れています。
質問
マージンの変更を処理するために他に何かする必要がありますか?
このシナリオでは、いつ tableview で reloadData を呼び出す必要がありますか?