使用自动布局和大小类

Posted

技术标签:

【中文标题】使用自动布局和大小类【英文标题】:Using Auto Layout and Size classes 【发布时间】:2016-02-10 20:15:05 【问题描述】:

我不熟悉使用 Auto Layout 和 Size 类,但我已经做了很多工作或研究了它们的工作原理。虽然我理解它,但我仍然无法弄清楚简单的事情。我想要做的是将所有 iPhone 的两个按钮以纵向模式居中,虽然它在 5.5 英寸屏幕上看起来不错,但随着屏幕尺寸的减小,它会变得更糟。我发现学习如何使用自动布局非常具有挑战性,因此非常感谢任何帮助。

【问题讨论】:

用你的两个按钮添加一个视图。然后设置视图垂直中心..如果您需要更多帮助,请告诉我。 【参考方案1】:

你的意思是你想让它们垂直居中吗? (看起来它们已经水平居中了。)

我的猜测是,现在,您对顶部按钮有 顶部间距 约束。这为您提供了顶部按钮和屏幕顶部之间的固定距离,这就是按钮在较小屏幕上向下推的原因 - 相同的距离代表较小屏幕的较大比例。

相反,您可能希望其中一个按钮具有 center Y 约束。将其构建为概念证明的快速方法是:

约束顶部按钮的中心 Y 等于其父视图的中心 Y 限制底部按钮的顶部与顶部按钮的底部之间留出一个小的(默认)空间

这是一个快速的自动布局系统,它使两个按钮都靠近屏幕中心,并在较小的设备上保持比例。试一试,看看它是否符合您的要求。

如果这看起来是正确的,但您希望这对按钮一起居中(也就是说,您希望它们之间的间隙直接落在屏幕的中心线上),您' 可能需要一个额外的 容器视图 包含两个按钮。然后,您可以将容器视图的中心 Y 固定到其父视图的中心 Y,并将按钮分别与容器的顶部和底部对齐。

希望有帮助!

【讨论】:

我试试看!感谢您的精彩解释! Alos,大部分都是以编程方式完成的吗? (我同意)还是通过故事板?每次我添加容器视图并单击其视图控制器时,Xcode 都会崩溃! 您应该能够在情节提要中添加容器视图。尝试使用 Editor > Embed In… 菜单,或者如果也失败了,只需将另一个普通视图从对象库(右下角)拖到画布上,然后将按钮移动到该视图中。【参考方案2】:

这也困扰着我,直到我想通了。这里有一些提示:

在底部有您选择的尺寸等级,在情节提要上有视图控制器的尺寸。它们是不同的东西!令人难以置信的是,改变尺寸等级也会改变控制器的尺寸,所以你最终会认为 iPhone 是紧凑型的。 它的实际工作方式是这样的:大小类确定存在哪些视图和约束。您会注意到,当您在除任何/任何之外的尺寸类别中下拉视图时,右侧的检查器中会出现一个复选框。它将在“已安装”下。如果您现在更改大小类,则视图会消失,直到您将其安装到这个新类上。约束也是如此。 演示视图控制器的大小由右手检查器控制。你可以把它做成你想要的任何尺寸,但你可能有一些目标设备,比如 iPhone 6。

自动布局:

在您弄清楚它们的含义之前,约束是很复杂的。你必须考虑一个假设的侏儒谁会为你画场景。如果你不给他足够的信息,他将不知道把控制放在哪里。如果你给他提供不一致的信息,他会吐出一个 NSLayoutConstraint 错误。 不要使用自动生成的约束。你永远不会知道它做了什么。使用逻辑。

您的具体问题:

    从任何/任何中的干净板开始 将按钮放入 右键单击左侧的按钮,将前导约束添加到边距。对右边做同样的事情。将约束常数编辑为零。确保它与边距无关,因为您希望它一直到边缘。这固定了按钮的 X 位置。您是说无论屏幕大小如何,按钮的边缘都必须接触到屏幕的边缘。 要固定按钮的 Y 位置,请为上边缘、另一个按钮创建约束,并添加高度约束。 更改控制器的大小以查看其外观。请记住,您可能需要刷新它。

【讨论】:

以上是关于使用自动布局和大小类的主要内容,如果未能解决你的问题,请参考以下文章

iOS 开发的大小类和自动布局

如何使用大小类和自动布局在 Xib 中水平对齐两个 UI 按钮

我可以用自动布局/大小类做到这一点吗?

在启用自动布局和大小类的情况下更改视图宽度

以编程方式为不同大小类创建具有不同常量的自动布局约束

在自动布局和尺寸类中屏蔽图像