Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS应用程序在不使用iOS 11 API的情况下遵守iPhone X屏幕限制_Ios_Iphone_Swift_Custom Controls_Iphone X - Fatal编程技术网

iOS应用程序在不使用iOS 11 API的情况下遵守iPhone X屏幕限制

iOS应用程序在不使用iOS 11 API的情况下遵守iPhone X屏幕限制,ios,iphone,swift,custom-controls,iphone-x,Ios,Iphone,Swift,Custom Controls,Iphone X,我有一个应用程序需要在iOS9-11和除X以外的iPhone上运行。我用XCode 9构建了它,这样它就可以在iPhone X上显示完整的屏幕,但我似乎无法让它正确显示。我的应用程序使用一个自定义UI视图,该视图将自己绘制在视图的范围内,即全屏视图。它当前将自己绘制在槽口的正下方。我想做的是,让它像iOS9+和iphone5+一样,但在X上画一个全屏背景,但只使用远离凹口的区域与用户交互。这既包括纵向时的顶部,也包括横向时的侧面。我基本上想扩展我的插图,以便在凹口下留一个空白,这样用户按钮就不会

我有一个应用程序需要在iOS9-11和除X以外的iPhone上运行。我用XCode 9构建了它,这样它就可以在iPhone X上显示完整的屏幕,但我似乎无法让它正确显示。我的应用程序使用一个自定义UI视图,该视图将自己绘制在视图的范围内,即全屏视图。它当前将自己绘制在槽口的正下方。我想做的是,让它像iOS9+和iphone5+一样,但在X上画一个全屏背景,但只使用远离凹口的区域与用户交互。这既包括纵向时的顶部,也包括横向时的侧面。我基本上想扩展我的插图,以便在凹口下留一个空白,这样用户按钮就不会像现在这样模糊了。我尝试过safeLayoutBounds,但似乎只能通过仅限iOS11的API访问它

重申一下,我想使用背景空间,但将控件等移离凹口。所以我想知道: 1-我已有的屏幕大小, 2-缺口在那里-我想我只能通过手机型号和方位来判断, 3-缺口覆盖的边界是什么,以便我可以避免它

如果不清楚,这里有两个屏幕截图来说明。对不起,尺寸太大了,我试着把它们调小一点:

横向槽盖按钮 它覆盖了显示器

好的,首先,也许最重要的是,为什么任何iPhone X都应该运行iOS 11以外的任何东西?提示:需要降级

话虽如此,诀窍是检查正在运行的iOS版本,然后了解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
净结果?您有一个视图,可以根据该视图创建其余布局。是的,它给出了不在安全区域的点。改变背景颜色,看看我的意思

我相信有更好的方法来确定a这个安全视图的实际高度,或者b来解释一些事情。但这应该适用于iOS 11、iOS 10、iPhoneX和iPhoneSE


此外,它还可以与自动布局一起使用。

Use应该为自动布局使用安全区域布局指南。检查此选项,您的布局在情节提要或代码中吗?主UI视图在情节提要中,我启用了安全布局指南,但我尚未更改任何约束。我的问题可能不清楚,但我不想支持运行iOS<11的iPhone X,我希望我的应用程序能在所有iPhone上运行,并能在iPhone X上正常运行。我不想使用iOS 11编程API,因为我不想限制兼容性。我以前没有使用过可用的功能-我想它允许您的代码在这两个平台上编译和运行。我会试试看。是的,如果@available能做到这一点。要快速查看安全区域,请将颜色从UIColor.clear更改为其他我喜欢的橙色!把上面的代码放在一个空项目中。它根据您的布局提出了自己的挑战。