2

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

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

由于以这种方式放置的界面元素太多,我想知道修复适用于 iPhone X 的代码的简单方法是什么?

4

1 回答 1

2

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

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

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

于 2017-10-24T17:20:13.840 回答