1

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 を呼び出す必要がありますか?

4

0 に答える 0