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

时间:2017-09-20 10:17:07

标签: ios ios11 autoresizingmask safearealayoutguide

我们有一些仍在使用Autoresizing mask的遗留项目,一切都运行良好,直到iOS 11和iPhone X.随着安全区域布局指南的引入,什么是支持iPhone X的最佳解决方案? / p>

  1. 我们可以使用自动调整掩码转换所有接口以使用自动布局。考虑到动态添加和调整视图,这似乎是一项重大工作。

  2. 我们继续使用自动调整遮罩,但调整界面以添加iPhone X和iOS 11的嵌入边距。

2 个答案:

答案 0 :(得分:5)

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

  1. 在Interface Builder中,为XIB启用自动布局并启用“安全区域”。
  2. 选择视图中的所有UI元素,然后选择Editor-> Embed In-> View。此技巧保留了所选元素的自动调整设置。
  3. 在新创建的UIView中,使用自动布局将顶部,前导,底部和尾部边缘设置为超视图安全区域。
  4. 这对我的项目非常有用,可以快速支持我的许多XIB文件中的安全区域,而无需从自动调整大小更改为自动布局。

    韦斯

答案 1 :(得分:3)

第三种选择是在需要的地方使用autolayout,并使用autoresizing离开应用程序的其余部分。从XCode 8开始,您可以混合自动调整和自动布局。对于xib或storyboard中的每个视图,您可以选择设置自动调整遮罩或自动布局约束。在视图上使用一种规则会禁用该视图的另一种规则。但你可以在另一种观点上使用另一种。此链接包含更多信息: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;
    }
}