2017-09-29 9 views
2

私のアプリでは、モーダルビューコントローラを表示し、このビューコントローラにはスーパービューを塗りつぶすUICollectionViewが含まれています。コレクションビューの各セルは、ビューの境界と同じサイズのフルスクリーンである必要があります。これを達成するために、UICollectionViewFlowLayoutitemSizeをビューのバインドのサイズに設定します(viewDidLayoutSubviews)。iPhoneのフルスクリーンUICollectionViewCell問題

これは、風景のiPhone Xを除いて、すべてのデバイスと向きで本当にうまく機能します。その場合にその画面を表示すると、安全領域のレイアウトマージンが有効になり、セルの配置に影響を与えるように見えます。セルは、ディスプレイの左端から押し上げられ、セルの下端がホームインジケータの垂直中心に揃うように押し上げられます。ビューデバッガでレイアウトを調べると、コレクションビューが画面に表示されますが、コレクションビューの先頭から挿入されていても、セルのY位置は-10.67であり、X位置は0です。特に、これは、コンソールに記録されます。

The behavior of the UICollectionViewFlowLayout is not defined because: 
the item height must be less than the height of the UICollectionView minus the section insets top and bottom values, minus the content insets top and bottom values. 
The relevant UICollectionViewFlowLayout instance is <UICollectionViewFlowLayout: 0x7fa6311253b0>, and it is attached to <UICollectionView: 0x7fa63207e800; frame = (0 0; 812 375); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x608000244d70>; layer = <CALayer: 0x60800023ef00>; contentOffset: {-44, 0}; contentSize: {0, 812}; adjustedContentInset: {0, 44, 21, 44}> collection view layout: <UICollectionViewFlowLayout: 0x7fa6311253b0>. 

をここで起こっているとどのようにこれを解決することができますか?

+0

興味があるだけ、なぜ 'collectionViewの内側itemSizeを設定されていません(_:レイアウト:sizeForItemAt:)'の代わりに 'viewDidLayoutSubviews'の? – damiancesar

+0

また、最初に述べたようにitemSizeを設定する場合は、 'view.bounds'ではなく、widthとheightに' view.frame'を必ず使用してください。 – damiancesar

答えて

8

デフォルトでは、iOS 11はiPhone Xのコンテンツインセットをランドスケープで自動的に調整し、この問題が発生します。この問題を解決するには、このシナリオでは必要ない、望ましくない自動コンテンツ挿入調整を無効にするだけです。

collectionView.contentInsetAdjustmentBehavior = .never

+0

完璧に作業しました!私はこれをオフにするために 'UICollectionViewFlowLayoutSectionInsetReference'を使用しようとしていましたが、これ以外の何かをしているようでした。 – sahandnayebaziz

+1

こんにちは、私はdidSetオブザーバーのコレクションにこの動作を追加しました。 'return self.view.frame.size'のように' collectionView(_:layout:sizeForItemAt:) 'でセルサイズを設定していますが、私はまだiPhone Xのランドスケープだけで問題があります。確認する必要があるものはありますか? – Jose