横屏上的iPhone X上的全屏UICollectionViewCell问题

横屏上的iPhone X上的全屏UICollectionViewCell问题

问题描述:

在我的应用程序中,我以模态方式呈现视图控制器,并且此视图控制器包含填充超视图的UICollectionView。集合视图中的每个单元格都需要全屏 - 与视图的边界大小相同。为了达到这个目的,我只需将UICollectionViewFlowLayoutitemSize设置为viewDidLayoutSubviews中视图的边界大小。横屏上的iPhone X上的全屏UICollectionViewCell问题

这对于所有设备和方向非常有效,除了横向的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>. 

这里发生了什么事情?如何解决这个问题?

+0

只是好奇,为什么不设置itemSize'的CollectionView的内部(_:布局:sizeForItemAt:)''代替的viewDidLayoutSubviews'? – damiancesar

+0

另外,如果设置itemSize与第一个提到的,请确保使用'view.frame'的宽度和高度,而不是'view.bounds'。 – damiancesar

默认情况下,iOS 11自动调整横向版iPhone X的内容插页,导致发生此问题。要解决该问题,您可以简单地禁用自动内容嵌入调整,因为在这种情况下不需要也不需要。

collectionView.contentInsetAdjustmentBehavior = .never

+0

工作完美!我试图使用'UICollectionViewFlowLayoutSectionInsetReference'来关闭它,但似乎在做这件事以外的事情。 – sahandnayebaziz

+1

嗨,我已经把这个行为添加到我在didSet观察者的集合中,我将'cellView size(_:layout:sizeForItemAt:)设置为像'return self.view.frame.size'一样的单元大小, m仍然只在iPhone X的环境下出现问题。还有其他事情我应该检查吗? – Jose