iPhone X 横向全屏 UICollectionViewCell 问题

Full-screen UICollectionViewCell issue on iPhone X in landscape

在我的应用程序中,我以模态方式呈现一个视图控制器,并且该视图控制器包含一个 UICollectionView 来填充父视图。集合视图中的每个单元格都需要全屏 - 与视图的边界大小相同。为此,我只需将 UICollectionViewFlowLayoutitemSize 设置为 viewDidLayoutSubviews 中视图的边界大小。

这在所有设备和方向上都非常有效,除了横向的 iPhone X。在这种情况下显示该屏幕时,安全区域布局边距似乎开始发挥作用并影响单元格的定位。单元格从显示屏的左边缘推过,并向上推,使单元格的底部与主页指示器的垂直中心对齐。使用 View Debugger 检查布局显示集合视图填满了屏幕,但单元格的 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>.

这是怎么回事,如何解决?

默认情况下,iOS 11 会自动调整横向 iPhone X 的内容插图,从而导致出现此问题。要解决它,您可以简单地禁用自动内容插入调整,因为在这种情况下不需要也不希望这样做。

collectionView.contentInsetAdjustmentBehavior = .never