代码之家  ›  专栏  ›  技术社区  ›  Khoury

为什么iPhone X会忽略UICollectionView的UIEdgeInsets?

  •  0
  • Khoury  · 技术社区  · 6 年前

    我有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有什么我特别缺少的吗?

    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   Chanchal Chauhan    6 年前

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

    为此,请从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)
    

    希望这有帮助:)