支持 iPhone X 的旧应用程序?

Old app to support for iPhone X?

我的旧 iOS 应用程序在所有 iPhone 版本中运行良好(iPhone X 模型除外)。我 运行 进入 iPhone X 模拟器,看到一些屏幕重叠在 iPhone X 屏幕的底部。我的应用程序所有 uiviewcontrollers 都是以编程方式创建的,而不是由故事板设计的。所以在我使用的所有视图控制器中 (self.view.frame) 来找到它的框架大小。在iPhoneX中故事板中有安全防护区设计。但是如何在运行时间内计算安全保护区。在搜索 google 时,它提供了一些示例来查找 iOS11 支持的安全保护区。但是我想 运行 我的应用程序来自 ios9?我的项目中有很多 uiviewcontroller .. 那么谁能告诉我完成此任务的最简单方法?

为旧的(故事板之前的手动布局)应用程序(具有旧的 pre-11 部署目标)的 [​​=20=] 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 版本下安全使用