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

我有一个应用需要在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 - 界限是什么缺口覆盖,所以我可以避免它。

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

景观缺口覆盖按钮 肖像覆盖到显示器

回答:

好吧,首先 - 也许最重要的是,为什么要任何 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。

以上是 iOS应用尊重iPhone X屏幕约束,而不使用iOS 11 API 的全部内容, 来源链接: utcz.com/qa/260870.html

回到顶部