私のアプリでは、モーダルビューコントローラを表示し、このビューコントローラにはスーパービューを塗りつぶすUICollectionView
が含まれています。コレクションビューの各セルは、ビューの境界と同じサイズのフルスクリーンである必要があります。これを達成するために、UICollectionViewFlowLayout
のitemSize
をビューのバインドのサイズに設定します(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>.
をここで起こっているとどのようにこれを解決することができますか?
興味があるだけ、なぜ 'collectionViewの内側itemSizeを設定されていません(_:レイアウト:sizeForItemAt:)'の代わりに 'viewDidLayoutSubviews'の? – damiancesar
また、最初に述べたようにitemSizeを設定する場合は、 'view.bounds'ではなく、widthとheightに' view.frame'を必ず使用してください。 – damiancesar