• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

iOS应用尊重iPhone X屏幕约束,而不使用iOS 11 API

IOS 来源:absmiths 12次浏览

我有一个应用需要在iOS9-11以及X以外的iPhone上运行。我已经使用XCode 9构建了它,以便获得完整的iPhone X屏幕,但我似乎无法让它与缺口正确显示。我的应用程序使用自定义用户界面视图,在视图范围内绘制自己(全屏视图)。它目前正位于缺口之下。我想要做的是,它的行为与iOS9 +中的iPhone 5+一样,但在X上画一个全屏背景,但只能使用远离切口的区域与用户进行交互。这包括纵向时的顶部和手机横向时的侧面。我基本上想扩展我的插图,以允许在缺口下留有余量,所以用户按钮不会像当前那样被遮挡。我试过safeLayoutBounds,但似乎只能通过iOS11 API访问。iOS应用尊重iPhone X屏幕约束,而不使用iOS 11 API

要重申,我想使用空间作为后台使用,但scoot控件等离开缺口。所以我想知道: 1 – 屏幕尺寸(我已经有), 2 – 缺口在那里 – 我假设我只能通过手机型号和方向来分辨, 3 – 界限是什么缺口覆盖,所以我可以避免它。

这里有两个屏幕截图来说明,如果不清楚的话。很抱歉的大小,我试图调整他们更小:

景观缺口覆盖按钮 Landscape notch covers buttons 肖像覆盖到显示器 Portrait it covers the display


===========解决方案如下:

好吧,首先 – 也许最重要的是,为什么要任何 iPhone X除了iOS 11还在运行吗? (提示:需要降级)

话虽如此,诀窍是(a)检查正在运行的iOS版本,然后(b)了解在iOS 11中引入了哪些其他–即安全区域。

因为我需要知道这个安全区的更确切尺寸我增加了一个无形的,最低级的视图。我想你可以把我的代码,看看如何将它应用到你的需求:

let safeAreaView = UIView() 
.... 
safeAreaView.backgroundColor = UIColor.clear 
safeAreaView.translatesAutoresizingMaskIntoConstraints = false 
view.addSubview(safeAreaView) 
.... 
view.sendSubview(toBack: safeAreaView) 

而且布局:

let margins = view.layoutMarginsGuide 
view.addLayoutGuide(margins) 

if #available(iOS 11, *) { 
    let guide = view.safeAreaLayoutGuide 
    safeAreaView.topAnchor.constraintEqualToSystemSpacingBelow(guide.topAnchor, multiplier: 1.0).isActive = true 
    safeAreaView.bottomAnchor.constraintEqualToSystemSpacingBelow(guide.bottomAnchor, multiplier: 1.0).isActive = true 
} else { 
    safeAreaView.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true 
    safeAreaView.bottomAnchor.constraint(equalTo: bottomLayoutGuide.topAnchor).isActive = true 
} 
safeAreaView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true 
safeAreaView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true 

最终结果?你有一个观点,你可以基于剩余的布局。是的,它在“安全”区域提供不是的点。更改backgroundColor以了解我的意思。

我确定有更好的方法可以确定(a)这个safeView的实际高度或(b)说明一些事情。但这应该适用于iOS 11,iOS 10,iPhone X,iPhone SE。

更多的,它适用于AutoLayout。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)