我的旧版iOS应用程序适用于所有iPhone版本(iPhone X型除外)。我遇到iPhone X模拟器,看到一些屏幕在iPhone X屏幕底部重叠。我的应用程序所有uiviewcontrollers都是以编程方式创建的,而不是由故事板设计的。因此,在所有视图控制器中,我使用(self.view.frame)来查找其帧大小。在iPhoneX中,故事板中设有安全防护区域。但是如何在运行时计算安全防护区域。在搜索谷歌时,它提供了一些样本来找到安全防护区域,这是iOS11的支持..但我想从ios9运行我的应用程序?我的项目中有很多uiview控制器..所以有人能告诉我一个最简单的方法来完成这个任务吗?
答案 0 :(得分:0)
将旧的(故事前手动布局)应用程序(使用旧的11之前的部署目标)添加运行时修复iPhone X布局问题的一种可能方法是添加类似于以下内容的Objective C代码:
CGRect r0 = self.view.frame;
CGRect r1 = r0;
if (@available(iOS 11.0, *)) {
r1 = self.view.safeAreaLayoutGuide.layoutFrame;
}
if ( r1.size.height < (r0.size.height - 20.0) ) {
// fix top and bottom view overlap outside safe area here
}
在每个UIViewController的viewWillLayoutSubviews方法中。
@available检查将使此代码在iOS 11之前的iOS版本中安全使用。