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