2017-09-15 27 views
0

新的iPhone X已经摆脱了主页按钮,并在底部用一个“家用指示器”代替它,允许用户向上滑动以返回到主屏幕。如何检测iPhone X家庭指示灯?

我的问题是,我们如何检测这个家庭指标是否在屏幕上?我想做类似的事情:

if (!notfullScreen) 
{ 
    if (swipeBarExists) 
    { 
     viewHeight -= swipeBarHeight; 
    } 
} 

我登记了[UIApplication sharedApplication],什么也没找到。基本上我不知道该怎么称呼这件事,并且无法找到答案。

+2

看看safeAreaInsets,其中包含屏幕的这个区域所占用的空间 –

+1

Apple似乎很清楚我们不应该这样写代码。看看https://developer.apple.com/videos/play/fall2017/801/ –

+0

@Ser Pounce我没有在这方面的工作,但下面的链接可能是有用的https://medium.com/the-traveled- ios-developers-guide/iphone-x-handling-with-home-indicator-2e8e47f5647f –

回答

6

要回到家指标的高度,审视safeAreaInsets.bottom,为UIView定义。请注意,此值可能会发生变化,例如,当您旋转到横向缩小时。要在发生这种情况时收到通知,请在您的视图控制器中执行safeAreaInsetsDidChange

如果您需要使用自动布局来布置此元素上方的内容,请参阅safeAreaLayoutGuide

+0

我发现安全区太大 - 并且使您的应用看起来像一个模拟的iOS 10应用。它实际上在斜面从顶部和底部开始之后移除所有房间。我用旧的方式检测iPhone X,并在指示器的底部留下了一些空间。这不是真棒,但它适用于我,并保持我的应用程序看起来很现代,并允许我在不在iPhone X上时覆盖它。 – absmiths

-4

不得不这样做的老式方法:

- (CGFloat) homeIndicatorHeight 
{ 
    if ([DeviceType deviceHasFivePointEightInchScreen]) 
    { 
     if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) 
     { 
      return 21; 
     } 
     else 
     { 
      return 33; 
     } 

    } 
    else 
    { 
     return 0; 
    } 
} 
+0

这是baaaddd。我会发布一个更好的答案来获取可能随时改变的实际值。 – Joey