【问题标题】:Migrating a project using autoresizing masks for iPhone X使用 iPhone X 的自动调整蒙版迁移项目
【发布时间】:2018-03-01 08:34:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: ios ios11 autoresizingmask safearealayoutguide


    【解决方案1】:

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

    1. 在 Interface Builder 中,为 XIB 启用自动布局并打开 Safe Areas。
    2. 选择视图中的所有 UI 元素,然后选择 Editor->Embed In->View。此技巧保留了所选元素的自动调整大小设置。
    3. 在创建的新 UIView 中,使用 Auto-layout 将顶部、前导、底部和后沿设置为 superview 安全区域。

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

    韦斯

    【讨论】:

    • 韦斯,你真棒。谢谢
    【解决方案2】:

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

    【讨论】:

    • 很好的答案... safeAreaBottomMargin return window.safeAreaInsets.bottom 的更短替代方案
    • 我们项目的每个 UIViewController 我们应该调用这两个方法 - (CGFloat) statusBarHeight, - (CGFloat) safeAreaBottomMargin, from viewdidload 方法?
    • 如果你的屏幕上有导航栏、标签栏或工具栏,你不需要任何东西,它们会根据设备自动定位。如果 iPhone X 屏幕出现问题,您可以根据这些方法的返回值使用和定位视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多