如何检测 iPhone X 主页指示灯?

Posted

技术标签:

【中文标题】如何检测 iPhone X 主页指示灯?【英文标题】:How to detect iPhone X home indicator? 【发布时间】:2017-09-15 07:56:42 【问题描述】:

新 iPhone X 取消了主页按钮,取而代之的是底部的“主页指示器”,允许用户向上滑动返回主屏幕。

我的问题是,我们如何检测这个主页指示器是否在屏幕上?我想做类似的事情:

if (!notfullScreen)

    if (swipeBarExists)
    
        viewHeight -= swipeBarHeight;
    

我检查了[UIApplication sharedApplication],但一无所获。基本上我真的不知道该怎么称呼这个东西,也很难找到答案。

【问题讨论】:

看看safeAreaInsets,它包含了屏幕这个区域所占据的空间 Apple 似乎很清楚我们不应该编写这样的代码。关注developer.apple.com/videos/play/fall2017/801 @Ser Pounce 我还没有处理这个问题,但下面的链接可能有用medium.com/the-traveled-ios-developers-guide/… 是的,我意识到他们现在可能希望以不同的方式完成此操作,但只是在寻找一个可以放在当前代码之上的快速解决方案。 【参考方案1】:

您可以使用为UIView 定义的safeAreaInsets.bottom 来获取您应该插入内容的空间量,以确保它不会与主页指示器(或其他元素)重叠。请注意,此值可能会发生变化,例如,当您在 iPhone 上旋转到横向时,它会缩小。要在发生这种情况时得到通知,请在您的视图控制器中实现safeAreaInsetsDidChange。您还可以使用带有自动布局的safeAreaLayoutGuide

所以,如果你有一个全屏视图,你可以像这样检查:

override func viewSafeAreaInsetsDidChange() 
    super.viewSafeAreaInsetsDidChange()

    if view.safeAreaInsets.bottom > 0 
        //home indicator
     else 
       //no home indicator
    

请注意,没有 API 可以仅获取主页指示器栏本身的高度。

【讨论】:

我发现安全区域太大了 - 让您的应用看起来像一个模拟的 iOS 10 应用。在斜面从顶部和底部开始后,它实际上移除了所有空间。我使用了检测 iPhone X 的老式方法,并在底部为指示器留了一点空间。它不是很棒,但它对我有用,让我的应用看起来很现代,并且允许我在不使用 iPhone X 时覆盖它。 感谢您的回复,但重新审视这一点,这将为您提供 safeAreaInsets.bottom,而不是 home 指示器的高度。 safeAreaInsets.bottom 可以包括标签栏、工具栏或 Apple 决定在未来添加的任何其他此类内容。

以上是关于如何检测 iPhone X 主页指示灯?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone X 的主页指示器下方扩展底视图颜色?

UITableview 与 iPhone X 上的主页指示器合并

iPhone-X - 如何强制用户滑动两次主页指示器进入主屏幕

ios Iphone X 仅在从底部拖动时显示主页指示器

自定义 UIToolbar 太靠近 iPhone X 上的主页指示器

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