iPhone X 界面编程无自动布局
Posted
技术标签:
【中文标题】iPhone X 界面编程无自动布局【英文标题】:iPhone X interface programming without autolayout 【发布时间】: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 的代码?
【问题讨论】:
【参考方案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 上支持横向并希望您的视图尊重左右安全区域,则需要考虑安全区域。以上是关于iPhone X 界面编程无自动布局的主要内容,如果未能解决你的问题,请参考以下文章