不了解自动布局、约束和尺寸类

Posted

技术标签:

【中文标题】不了解自动布局、约束和尺寸类【英文标题】:Not understanding auto layout, constraints and size classes 【发布时间】:2015-04-02 20:11:41 【问题描述】:

我有点卡住,任何帮助将不胜感激!

我会给你一个快速的概述。我设计了一个使用 iphone 6 屏幕尺寸在草图中构建的屏幕,然后重新设计以适合 iphone 5/5s/5c 和 6 plus,因为这些是我想要支持的唯一设备。

但设计部分或仅针对一种特定屏幕尺寸实施设计很容易,我理解这部分。我完全迷失在哪里,是如何在一个视图控制器中实现一种设计,使其在我设计的所有屏幕尺寸中看起来都应该如此。

我已经阅读了很多自动布局和尺寸类教程,但不确定我如何正确使用它们,以便应用程序识别“这是一部 iphone 5,请改用这些图像尺寸和位置,这是一个iphone 6 plus,使用这些”等等。

到目前为止,我所看到的关于自动布局和约束的所有内容仅使用一组数字来判断与元素的距离,但所有屏幕尺寸都会有不同的距离。

我遗漏了什么或不理解什么?我知道我看错了。

提前感谢所有帮助!

【问题讨论】:

【参考方案1】:

您说得对,只有一组数字可以用来判断距离,但这仍然可以描述视图在不同屏幕尺寸上的显示方式。您的问题可能是您将约束视为描述您的视图框架? (这显然必须在每台设备上有所不同)。我发现将约束视为描述我的视图的每个边缘如何与另一个视图相关会更有帮助。

例如,这是一个视图控制器,我设置了所有相同的约束以及它在不同设备上的外观。约束描述了如何将大灰色视图固定在距容器视图左右边缘 20 个点的左右边缘。它固定在距标签顶部 8 点和距标签顶部 8 点的位置。标签垂直和水平居中,并且具有固有的内容大小。每个按钮从底部边缘固定 20 点,按钮 1 和 2 分别固定在距离左右边缘 20 点的位置。

我不知道这是否有帮助,或者这不是您想要的答案,您需要根据设备以不同的方式排列视图:您可以告诉 Xcode 哪个设备尺寸和方向是您正在创建的约束用于,在 Interface Builder 中使用此按钮。

使用它来选择设备尺寸/方向。之后,您创建的任何约束都将仅在该设备上使用。默认情况下会选择任何宽度和高度,因此通常您的约束会应用于所有设备。

此外,您无法选择要支持的设备,只能选择 iOS 版本。

【讨论】:

非常感谢您的回答,这确实有助于改变我的观点。我还在为一些事情苦苦挣扎,但你的例子帮助我理解了之前的一部分。 很高兴能帮上忙。你还在为哪些事情苦苦挣扎? 非常感谢您的回答,这确实有助于改变我的观点。我仍在为一些事情苦苦挣扎,但你的例子帮助我从早些时候理解了其中的一部分。我仍在努力解决的问题是,如果我仍然有 3 个不同尺寸的按钮,例如 5 和 6、6 + 尺寸,我如何确定每种尺寸的数学约束,以及我是否要构建三个屏幕,如果我只能插入一组约束,代码如何知道要显示哪个按钮大小?还是更像是一种“实验直到看起来正确”的游戏? 在您的示例中,您使用了UIButton,但是它们具有隐式内容大小(其大小取决于其文本和字体),因此您不应手动设置其大小。当我创建约束时,我基本上认为,例如,我希望这个按钮被固定在每个屏幕尺寸的底部和左侧,并且创建约束可以做到这一点。如果你能给我一个更具体的例子,我可能会提供更多帮助。 另外,不,一旦你有了更多的经验,你就不需要进行试验了。但是,首先尝试看看您可以使用 AutoLayout 做哪些事情会很有用,我知道我确实做到了。

以上是关于不了解自动布局、约束和尺寸类的主要内容,如果未能解决你的问题,请参考以下文章

自动布局和图像视图/视图

不同设备尺寸的 iOS 自动布局约束值

iOS如何激活/停用某个尺寸类(方向)的布局约束?

需要实现自动布局约束和 SizeClasses?

iOS 自动布局约束:忽略隐藏或零尺寸视图?

UITableView 最大尺寸,同时尊重自动布局约束