2017-10-13 146 views
0

我有一个应用程序,它没有UINavigationController,它有一个UICollectionView,其中有一些单元格作为其源。在iPhone X状态栏后面添加UIView

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

} 

,但它不工作。

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

谢谢

回答

2

你必须告诉你的CollectionView调整插图:

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

这将确保您的内容将足够的插图,所以它不是由iPhone X的状态栏重叠。

+0

谢谢,不知道属性。 –

+0

不客气。如果我回答了您的问题,那么您可以考虑将其设置为已回答。 –