【问题标题】:How to detect iPhone X home indicator?如何检测 iPhone X 主页指示灯?
【发布时间】: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/…
  • 是的,我意识到他们现在可能希望以不同的方式完成此操作,但只是在寻找一个可以放在当前代码之上的快速解决方案。

标签: ios iphone cocoa-touch iphone-x


【解决方案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 决定在未来添加的任何其他此类内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 2018-02-21
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多