使用自动布局保持正确的 view.frame.origin.y

Posted

技术标签:

【中文标题】使用自动布局保持正确的 view.frame.origin.y【英文标题】:Keep correct view.frame.origin.y with autolayout 【发布时间】:2014-07-17 22:53:55 【问题描述】:

我正在尝试在我的项目中始终使用自动布局,但我无法理解它。

这里我有一个 UIView 有 2 个子视图:

我希望它在retina 4 inch 中保持这种状态,但我想在3.5 inch 屏幕上将view.frame.origin.y 向上移动40 或60 点。有没有办法使用标准的自动布局约束来做到这一点?

显然,这里不能选择不使用自动布局。

我尝试上下设置不同的约束,但它们似乎无法让我完全控制框架的 y 值。

【问题讨论】:

【参考方案1】:

我相信您需要使用UIViewController's topLayoutGuide。请查看Apple's Technical Q&A QA1797 "Preventing the Status Bar from Covering Your Views",希望这正是您所需要的。

更新

很抱歉没有仔细阅读您的问题。我认为如果没有运行时计算,您的视图不能将 y 坐标移动某个任意值。但是你可以通过结合viewDidLoad方法中的2个约束和修改约束值来实现你所需要的:

    按住 Control 从标签(需要在 3.5 英寸屏幕上向上移动)拖动到 bottomLayoutGuide 并设置垂直间距限制。 按住 Control 从您的标签拖动到自身并设置标签的高度限制。

这让您在 3.5 英寸屏幕上比 4 英寸屏幕偏移 88 像素。在viewDidLoad 中,您可以检测设备是否有 3.5" 屏幕并将第一个约束值增加 20/40/60。

这不是一个优雅的解决方案,但希望它有所帮助。

【讨论】:

不,问题与状态栏无关。只需要一种可靠的方法来使用自动布局将视图 20/40/60 点向上

以上是关于使用自动布局保持正确的 view.frame.origin.y的主要内容,如果未能解决你的问题,请参考以下文章

关闭自动布局似乎会改变屏幕的高度

如何使用自动布局将图像彼此水平对齐

使用自动布局保持 UILabel 居中

使用自动布局将图像宽度调整为 100%,同时保持纵横比

iOS:使用自动布局保持视图彼此按比例调整大小

在 CSS FlexBox 布局中自动调整图像大小并保持纵横比?