【问题标题】:iPhone X interface programming without autolayoutiPhone X 界面编程无自动布局
【发布时间】:2017-10-24 16:45:08
【问题描述】:

我有一个旧的应用程序源代码,它使用没有自动布局或大小类的故事板和 xib。即使我从头开始重写它,由于模块数量太多,这需要一些时间。迫切需要通过在运行时检测屏幕大小来修复手动设置 UI 元素框架的代码。所以这样写的代码会将元素放在安全区域之外:

  self.controlBarBkg568h.frame = CGRectMake(0, CGRectGetHeight(self.view.bounds) - tapBarBackgroundImage.size.height, CGRectGetWidth(self.view.bounds), tapBarBackgroundImage.size.height);

既然有这么多界面元素是这样放置的,我想知道有什么简单的方法可以修复适用于 iPhone X 的代码?

【问题讨论】:

    标签: xcode ios11 iphone-x safearealayoutguide


    【解决方案1】:

    UIView 上使用safeAreaInsets 属性。这是一个UIEdgeInsets 对象,描述了当前视图的安全区域。 (Documentation)

    在您的具体情况下,您应该能够将代码更改为以下内容:

    self.controlBarBkg568h.frame = CGRectMake(0, CGRectGetHeight(self.view.bounds) - tapBarBackgroundImage.size.height - self.view.safeAreaInsets.bottom, CGRectGetWidth(self.view.bounds), tapBarBackgroundImage.size.height);
    

    如果您有许多以这种方式定位的视图,则必须全部编辑它们以尊重安全区域。这是手动布局的缺点之一 - 将来很难更改(特别是如果没有任何帮助布局变量可以一次编辑多个变量)。

    有关相对于安全区域定位内容的更多文档可在此处获得:https://developer.apple.com/documentation/uikit/uiview/positioning_content_relative_to_the_safe_area

    【讨论】:

    • 我认为 0 也需要替换为 self.view.safeAreaInsets.left
    • @DeepakSharma 你是对的,但这取决于你的用例。如果您在 iPhone X 上支持横向并希望您的视图尊重左右安全区域,则需要考虑安全区域。
    猜你喜欢
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    相关资源
    最近更新 更多