在我的应用程序中,我以模态方式呈现一个视图控制器,这个视图控制器包含一个填充superview的UICollectionView。集合视图中的每个单元格都需要全屏显示-与视图边界相同的大小。为了实现这一点,我只需在viewDidLayoutSubviews中将UICollectionViewFlowLayout的itemSize设置为视图边界的大小即可。
这在所有设备和方向上都非常有效,除了iPhone X横向。在这种情况下呈现该屏幕时,似乎安全区域布局边距正在发挥作用并影响单元格的定位。单元格从显示屏左侧推出,并向上推动,使单元格的底部与主指示器的垂直中心对齐。使用View Debugger检查布局会显示集合视图填满了屏幕,但是单元格的Y位置为-10.67,X位置为0,尽管它从集合视图的前导处插入。值得注意的是,这在控制台中被记录下来:
这里发生了什么事情,如何解决?
这在所有设备和方向上都非常有效,除了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>.
这里发生了什么事情,如何解决?
collectionView(_:layout:sizeForItemAt:)
中设置itemSize
而不是在viewDidLayoutSubviews
中设置? - dispatchswiftview.frame
来设置宽度和高度,而不是view.bounds
。 - dispatchswift