如何检测 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 主页指示灯?的主要内容,如果未能解决你的问题,请参考以下文章
UITableview 与 iPhone X 上的主页指示器合并
iPhone-X - 如何强制用户滑动两次主页指示器进入主屏幕