iPhone X 上的额外底部空间/填充?
Posted
技术标签:
【中文标题】iPhone X 上的额外底部空间/填充?【英文标题】:Extra bottom space/padding on iPhone X? 【发布时间】:2017-09-15 12:46:41 【问题描述】:在 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
有没有更简洁的方法来检测这个填充的高度?
【问题讨论】:
请参阅此参考:medium.com/@hacknicity/… 看看这个可能会有帮助medium.com/the-traveled-ios-developers-guide/… 【参考方案1】:在 iOS 11 中,视图具有 safeAreaInsets
属性。如果您获得这些插图的 bottom
属性,您可以在 iPhone X 上获得底部填充的高度:
if #available(iOS 11.0, *)
let bottomPadding = view.safeAreaInsets.bottom
// ...
(同样适用于带有状态栏的顶部填充)
【讨论】:
【参考方案2】:在Objective-C
中if (@available(iOS 11.0, *))
UIWindow *window = UIApplication.sharedApplication.keyWindow;
CGFloat bottomPadding = window.safeAreaInsets.bottom;
【讨论】:
是的!view.safeAreaInsets.bottom
返回0
,您的提示正确返回:34
。
我回应其他用户。是的! “view.safeAreaInsets.bottom 返回 0,您的提示正确返回:34。”也适用于我
这在您想要获得“真正的”底部安全区域时很有用。如果那里有一个标签栏,那么我发现 vc.view.safeAreaInsets.bottom 包含标签栏高度,这是有道理的。但我希望我的自定义操作表覆盖工具栏,但不是一直到底部。所以这让我得到了我需要的号码。【参考方案3】:
var bottomPadding: CGFloat = 0.0
if #available(iOS 11.0, *)
let window = UIApplication.shared.keyWindow
bottomPadding = window?.safeAreaInsets.bottom ?? 0.0
现在您可以根据需要使用bottomPadding
。
【讨论】:
【参考方案4】:如果你突然没有视图,例如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
【讨论】:
【参考方案5】:iOS 11(以上答案的混合)
let padding = UIApplication.shared.keyWindow?.safeAreaInsets.bottom ?? 0
【讨论】:
【参考方案6】:UIApplication.shared.windows.first?.safeAreaInsets.bottom ?? 0.0
iOS 13 及更高版本
【讨论】:
这应该更高,因为keyWindow
在 iOS 13 中已被贬值【参考方案7】:
用这条线成为你的 iPhoneX 的底价
if #available(iOS 11.0, *)
let bottomPadding = view.safeAreaInsets.bottom
并且不要忘记在 layoutSubviews() 中添加这个 ,因为 safeAreaInsets 在 layoutSubviews() 中具有正确的大小,否则您将成为错误的值。
【讨论】:
以上是关于iPhone X 上的额外底部空间/填充?的主要内容,如果未能解决你的问题,请参考以下文章
垂直定位 UIBarButtonItem(对于 iPhone X)