使用 iPhone X 的自动调整掩码迁移项目

Migrating a project using autoresizing masks for iPhone X

我们有一些遗留项目仍在使用自动调整大小蒙版,在 iOS 11 和 iPhone X 之前一切正常。随着安全区域布局指南的引入,最好的解决方案是什么支持 iPhone X?

  1. 我们可以将所有具有自动调整大小掩码的界面转换为使用自动布局。考虑到正在动态添加和调整视图,这似乎是一项重大工作。

  2. 我们继续使用自动调整大小蒙版,但调整界面以添加 iPhone X 和 iOS 11 的插入页边距。

第三种选择是在需要的地方使用自动布局,并让应用程序的其余部分保持自动调整大小。自 XCode 8 起,您可以混合使用自动调整大小和自动布局。对于 xib 或故事板中的每个视图,您可以选择设置自动调整大小掩码或自动布局约束。在视图上使用一种规则会禁用该视图的另一种规则。但是您可以在另一个视图上使用另一种。 link 有更多信息:http://www.thomashanning.com/xcode-8-mixing-auto-autoresizing-masks/

如果您选择继续只使用自动调整大小蒙版,下面的辅助方法可能会帮助您正确布局视图。

statusBarHeight 为您提供设备状态栏的高度。 safeAreaBottomMargin 为您提供 iPhoneX 主页按钮指示器的底部边距。

- (CGFloat) statusBarHeight {
    return UIApplication.sharedApplication.statusBarFrame.size.height;
}

- (CGFloat) safeAreaBottomMargin {
    if (@available(iOS 11.0, *)) {
        UIWindow *window = UIApplication.sharedApplication.windows.firstObject;
        return window.safeAreaLayoutGuide.owningView.frame.size.height - window.safeAreaLayoutGuide.layoutFrame.size.height - window.safeAreaLayoutGuide.layoutFrame.origin.y;
    } else {
        return 0;
    }
}

以下是我使用 XIB 文件和自动调整布局的遗留项目解决此问题的方法:

  1. 在 Interface Builder 中,为 XIB 启用自动布局并打开安全区域。
  2. Select 视图中的所有 UI 元素,然后编辑器->嵌入->视图。此技巧会保留所选元素的自动调整大小设置。
  3. 在创建的新 UIView 中,使用自动布局将顶部、前导、底部和尾部边缘设置为超级视图安全区域。

这对我的项目非常有效,可以快速支持我的许多 XIB 文件中的安全区域,而无需从自动调整大小更改为自动布局。

韦斯