在 iPhone X 状态栏后面添加 UIView

Add UIView behind iPhone X status bar

我有一个应用程序,它没有 UINavigationController,它有一个 UICollectionView,其中有一些单元格作为它的提要。

为了避免单元格出现在状态栏后面,我在后面加了一个UIView

iPhone X 之前,这样做非常简单,如下所示:

let v = UIView()
v.backgroundColor = .white
view.addSubview(v)
v.anchor(top: view.topAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 0, paddinfLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 20)

这样做,如预期的那样,它后面会出现一个微小的白色层。

(此锚点方法来自扩展,而非默认语言)。

我如何为 iPhone X 实现此目标?

到目前为止,我尝试了以下代码:

if #available(iOS 11, *) {
    v.anchor(top: view.safeAreaLayoutGuide.topAnchor, left: view.safeAreaLayoutGuide.leftAnchor, bottom: nil, right: view.safeAreaLayoutGuide.rightAnchor, paddingTop: 0, paddinfLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 20)

    let window = UIWindow(frame: UIScreen.main.bounds)
    print("window.safeAreaInsets.top:", window.safeAreaInsets.top)
    if window.safeAreaInsets.top > CGFloat(0.0) {
        print("iPhone X")
        v.anchor(top:  view.safeAreaLayoutGuide.topAnchor, left: view.safeAreaLayoutGuide.leftAnchor, bottom: nil, right: view.safeAreaLayoutGuide.rightAnchor, paddingTop:-44, paddinfLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: window.safeAreaInsets.top)
    } else {
        v.anchor(top: view.topAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 0, paddinfLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 20)
    }

}

但是没用。

在这种情况下最好的方法是什么?

谢谢

您必须告诉您的 collectionView 调整插图:

if #available(iOS 11, *) {
    collectionView.contentInsetAdjustmentBehavior = .scrollableAxes
}

这将确保您的内容足够内嵌,不会与 iPhone X 的状态栏重叠。