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

3
我们有一些遗留项目仍在使用Autoresizing masks,一切都很好,直到iOS 11和iPhone X的出现。随着安全区域布局指南的介绍,支持iPhone X的最佳解决方案是什么?
1. 我们可以将所有使用Autoresizing masks的界面转换为使用自动布局。考虑到视图正在动态添加和调整,这似乎是一个重大的工作。 2. 我们继续使用Autoresizing masks,但调整接口以添加iPhone X和iOS 11的插入边距。
2个回答

6
这是我如何解决我的遗留项目中使用XIB文件和自动调整布局的问题:
  1. 在Interface Builder中,启用XIB的自动布局并打开安全区域。
  2. 选择视图中的所有UI元素,然后选择Editor->嵌入式->视图。这个技巧可以保留所选元素的自动调整设置。
  3. 在新创建的UIView中,使用自动布局将顶部、前导、底部和尾随边缘设置为父视图的安全区域。
这对于我的项目非常有用,可以快速支持我的许多XIB文件中的安全区域,而无需从自动调整布局更改到自动布局。
Wes

Wes,你太棒了。谢谢。 - agibson007

3
第三个选项是在你需要的地方使用autolayout,然后在其他地方使用autoresizing。自XCode 8版本起,您可以混合使用autoresizing和autolayout。对于xib或storyboard中的每个视图,您可以选择设置自动调整掩模或autolayout约束。对某个视图使用一种规则将禁用该视图的另一种规则。但是您可以在另一个视图上使用另一种规则。此链接提供了更多信息:http://www.thomashanning.com/xcode-8-mixing-auto-autoresizing-masks/ 如果您选择继续仅使用autoresizing masks,则下面的辅助方法可以帮助您正确布局视图。
statusBarHeight为设备状态栏的高度。safeAreaBottomMargin为iPhone X上留给主页按钮指示器的底部边距。
- (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;
    }
}

很棒的答案... 一个更短的安全区域底部边距的替代方法是 return window.safeAreaInsets.bottom - Devin Pitcher
我们项目中的每个UIViewController都应该从viewDidLoad方法中调用这两个方法:- (CGFloat) statusBarHeight 和 - (CGFloat) safeAreaBottomMargin吗? - Ankur Patel
如果您的屏幕上有导航栏、选项卡栏或工具栏,您无需做任何操作,它们会自动根据设备位置。当您在 iPhone X 屏幕上遇到问题时,您可以使用这些方法的返回值来使用和定位您的视图。 - Srdr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接