在iPhone X状态栏后添加UIView

时间:2017-10-13 08:43:03

标签: ios swift uistatusbar iphone-x

我有一个应用,它没有UINavigationController且有一个UICollectionView,其中有一些单元格作为其Feed。

为避免单元格出现在状态栏后面,我在其后面添加了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)
    }

}

但它不起作用。

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

谢谢

1 个答案:

答案 0 :(得分:3)

你必须告诉你的collectionView调整insets:

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

这将确保您的内容足够插入,以免iPhone X的状态栏重叠。