为啥 iPhone X 忽略 UICollectionView 的 UIEdgeInsets?

Posted

技术标签:

【中文标题】为啥 iPhone X 忽略 UICollectionView 的 UIEdgeInsets?【英文标题】:Why does iPhone X ignore UIEdgeInsets for UICollectionView?为什么 iPhone X 忽略 UICollectionView 的 UIEdgeInsets? 【发布时间】:2018-04-08 06:59:59 【问题描述】:

我的 collectionView 代码可以调整内容,使其位于导航栏下方。

        collectionView.contentInsetAdjustmentBehavior = .never
        let tabBarHeight = self.tabBarController?.tabBar.bounds.height
        let navBarHeight = self.navigationController?.navigationBar.bounds.height
        self.edgesForExtendedLayout = UIRectEdge.all
        self.collectionView.contentInset = UIEdgeInsets(top: navBarHeight!, left: 0.0, bottom: tabBarHeight!, right: 0.0)

这适用于 ios 11 上的所有其他设备(iPhone X 除外),在 iPhone X 上,内容位于应用启动时导航栏和工具栏的后面。

有什么我特别缺少 iPhone X 的吗?

谢谢

【问题讨论】:

检查您的收藏视图约束。也许它与superview 相关而不是SafeAreaTop Layout guide 你是对的,约束与超级视图有关。我已将它们更改为顶部布局指南,但现在当我滚动集合视图时,您看不到导航栏和工具栏后面的单元格模糊? 【参考方案1】:

我想你忘了计算状态栏的高度。 在 iPhone X 之前,状态栏的高度是 20pt,而在 iPhoneX 是 44pt。这就是您看不到完整单元格的原因。

为此,请从 superview 添加您的约束并编写以下代码:

    cv.contentInsetAdjustmentBehavior = .never
    let tabBarHeight = self.tabBarController?.tabBar.bounds.height ?? 0
    let statuBarHeight = UIApplication.shared.statusBarFrame.height
    let navBarHeight = self.navigationController?.navigationBar.bounds.height ?? 0
    self.edgesForExtendedLayout = UIRectEdge.all
    cv.contentInset = UIEdgeInsets(top: navBarHeight+statuBarHeight, left: 0.0, bottom: tabBarHeight, right: 0.0)

希望这会有所帮助:)

【讨论】:

是的!你太棒了!完美运行! :)

以上是关于为啥 iPhone X 忽略 UICollectionView 的 UIEdgeInsets?的主要内容,如果未能解决你的问题,请参考以下文章

为啥桌面视图与 iPhone X~iPhone XS Max 的大小不同?

iPhone Xs Max:AVCaptureVideoPreviewLayer 添加到 View 的子层时占用的空间小于 iphone x 的安全区域 - 为啥?

ios开发为啥iphone x push的时候tabbar显示有问题

安卓机集体模仿iPhone X是啥情况,为啥总有人喷华为?|问答No.2

为啥 Chrome 会忽略 IE 条件标签?

为啥clang忽略__restrict__?