在 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 的状态栏重叠。
我有一个应用程序,它没有 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 的状态栏重叠。