44

iPhone X を横向きで使用する場合は、safeAreaInsets をチェックして、左右に適切な大きさのガターを作成する必要があります。UITableView には、insetsContentViewsToSafeAreaセルの内容を安全な領域に自動的に保持する新しいプロパティ (デフォルトは true) があります。

UICollectionView に似たものがないように見えることに驚いています。縦スクロールのコレクション ビューの場合、横向きの場合は左右がセーフ エリアに挿入されることを期待します (逆に、横スクロールのコレクション ビューは、必要に応じて縦向きに挿入されます)。

この動作を確実にする最も簡単な方法は、コレクション ビュー コントローラーに追加することです。

- (void)viewSafeAreaInsetsDidChange {
    [super viewSafeAreaInsetsDidChange];
    UIEdgeInsets contentInset = self.collectionView.contentInset;
    contentInset.left = self.view.safeAreaInsets.left;
    contentInset.right = self.view.safeAreaInsets.right;
    self.collectionView.contentInset = contentInset;
}

... contentInset.left/right が通常ゼロであると仮定します。

(注: はい、UICollectionViewController の場合、それは である必要がありますself.view.safeAreaInsets。これが呼び出された時点では、safeAreaInsets奇妙なことに への変更はまだに反映されていませんself.collectionView)

何か不足していますか?このボイラープレートは十分に単純ですが、画面の端に触れるすべてのコレクション ビューで事実上必要になります。Apple がこれをデフォルトで有効にするものを提供していないのは、本当に奇妙に思えます。

4

6 に答える 6

11

上記の助けに感謝します。私の UICollectionViewController サブクラスでは、viewDidLoad() (Swift 3) に以下を追加しました。

if let flowLayout = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout {
    if #available(iOS 11.0, *) {
        flowLayout.sectionInsetReference = .fromSafeArea
    }
}
于 2017-09-29T17:21:42.630 に答える