IOS 11:iPhone X 上的 UICollectionView 大小错误

IOS 11: UICollectionView on iPhone X is sized wrong

我有一个集合视图,框架在 iPhone X 上显得太高。在所有其他设备上,调整大小和滚动都正常,如下所示:

但是在 iPhone X 上,它看起来像这样:

顶行被截断,不会一直滚动到最后一行。不知何故,大小调整正确计算了宽度而不是高度,高度大约高了 70 像素。 (我不担心顶部和底部的栏。我稍后会修复它们)

我猜这与 iPhone X 屏幕的插图调整有关,但我不知道如何修复它。我在调整集合视图大小的地方试过这个:

if #available(iOS 11.0, *) {
    collectionView.contentInsetAdjustmentBehavior = .always
}

但是,我似乎无法修复它。

编辑:

澄清一下,这个菜单的设置如下,屏幕上实际上有两个集合视图。第一个在启用分页的情况下水平滚动,以便它锁定到每个单元格。其他集合视图是第一个的单元格,它们垂直滚动。我们将调用这些 subCollectionViews。

子集合视图从原始集合视图接收的尺寸过高。在故事板上,集合视图的高度相对于顶部栏和底部分页栏定义为齐平。在story board中,collection view的高度比运行时计算出的高度大70像素左右。

因此对于单元格的布局指南:

override func awakeFromNib() {
    cellImage = UIImageView(frame: contentView.frame)
    cellImage?.contentMode = .scaleAspectFill
    cellImage?.clipsToBounds = true

    contentView.addSubview(cellImage!)
}

对于集合视图的布局:

        layout.scrollDirection = .vertical
        layout.minimumLineSpacing = 8
        layout.minimumInteritemSpacing = 8

故事板预设:

我想这就是你们所要求的。如果有什么需要看的,尽管问。

添加以下代码行。我想它会解决你的问题。

        override func viewWillAppear(_ animated: Bool) {
                super.viewWillAppear(animated)

                self.aCollectionVew.setNeedsLayout()
                self.aCollectionVew.layoutIfNeeded()
         }

请选择所有特征,spacingcontentInsetAdjustmentBehavior

快乐编码...:)

我也遇到了这个问题。需要调用 safeAreaLayoutGuide 来控制项目的大小。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    if #available(iOS 11.0, *) {
        return view.safeAreaLayoutGuide.layoutFrame.size
    } else {
        // Fallback on earlier versions
        return view.frame.size
    }
}