iPhone X上的额外底部空间/填充?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iPhone X上的额外底部空间/填充?相关的知识,希望对你有一定的参考价值。

在纵向模式下的iPhone X上,如果将安全区域的底部约束设置为0,则最终会在屏幕底部留出额外的空间。你如何以编程方式获得这个额外填充的高度?

我设法手动确定这个填充的高度是34,这是我如何设法用iPhone X检测实现它:

Swift 4.0和Xcode 9.0

if UIDevice().userInterfaceIdiom == .phone
{
    switch UIScreen.main.nativeBounds.height
    {
        case 2436: //iPhone X
        self.keyboardInAppOffset.constant = -34.0
        default:
        self.keyboardInAppOffset.constant = 0
    }
}

有没有更清晰的方法来检测这个填充的高度?

答案

ios 11中,视图具有safeAreaInsets属性。如果你得到这些插图的bottom属性,你可以在iPhone X上获得底部填充的高度:

if #available(iOS 11.0, *) {
    let bottomPadding = view.safeAreaInsets.bottom
    // ...
}

(同样用于带状态栏的顶部填充)

另一答案

在Objective-C中

if (@available(iOS 11.0, *)) {
   UIWindow *window = UIApplication.sharedApplication.keyWindow;
   CGFloat bottomPadding = window.safeAreaInsets.bottom;
}
另一答案

如果突然你没有视图,例如CollectionViewLayout,你也可以从Window中检索它:

private static var itemHeight: CGFloat {
    guard #available(iOS 11.0, *),
        let window = UIApplication.shared.keyWindow else {
            return Constants.itemHeight
    }
    return Constants.itemHeight - window.safeAreaInsets.bottom
}
另一答案
var bottomPadding: CGFloat = 0.0
if #available(iOS 11.0, *) {
     let window = UIApplication.shared.keyWindow
     bottomPadding = window?.safeAreaInsets.bottom ?? 0.0
}

现在您可以根据需要使用bottomPadding

另一答案

使用此行成为iPhoneX的最低价值

if #available(iOS 11.0, *) {
            let bottomPadding = view.safeAreaInsets.bottom
  }

并且不要忘记在layoutSubviews()中添加它,因为safeAreaInsets在layoutSubviews()中具有正确的大小,否则您将成为错误的值。

另一答案

iOS 11(上面的答案混合)

let padding = UIApplication.shared.keyWindow?.safeAreaInsets.bottom ?? 0

以上是关于iPhone X上的额外底部空间/填充?的主要内容,如果未能解决你的问题,请参考以下文章

垂直定位 UIBarButtonItem(对于 iPhone X)

如何删除 textView 上的顶部和底部填充?

如何将图像限制在 iPhone X 上的 View Controller 底部(低于 home 指示器)

引导程序上的移动视图在容器底部有额外的空白空间

每行的流布局中的额外填充

iPhone X 将对象底部对齐到安全区域废墟在其他设备上的外观