我应该使用自动约束来布置每个元素吗?

时间:2015-01-05 04:22:05

标签: ios xcode user-interface

自动约束看起来像是一件苦差事。我在Main.storyboard中的主视图(这是一个单视图应用程序)中有很多元素。想象一下标签,按钮,控件等等。

例如,拿一个标签说“" Hello World"它在屏幕的上半部分水平居中。

我需要添加以下约束以使其显示" normal"在我的各种设备ipad / iphone:

  1. 水平中心约束
  2. 领先空间
  3. 顶级空间
  4. 尾随空间
  5. 它有效,但看起来很多工作,我不记得在过去(约3年前)用支柱和弹簧做这项工作。所以我需要将所有这些约束添加到我的每个其他元素中。所以如果我有10个元素,我需要大约10x4 = 40个约束?这是理想的做法吗?

    如果由我将视图和元素放在视图中,并且元素中的所有控件都会相对拉伸,以适应设备的大小。一个例子就像在photoshop中,我们只是决定整体图像的样子,然后缩放图像以适合我们想要的尺寸。这在xcode中是否可行?

    请注意,我的应用程序只是portait - 对于iphone / ipad,但两者看起来完全相同(即控件的布局相同)

2 个答案:

答案 0 :(得分:1)

您不需要设置那么多约束。 根据您的示例或前导,尾随和顶部空间,水平中心+顶部空间就足够了。

如果您正在设置前导,尾随和水平中心,则表示您在该轴上过度指定,并且可能会给自动布局系统提供相互矛盾的信息,这些信息会导致问题。

答案 1 :(得分:0)

对于该特定示例:不,您只需要水平中心和顶部空间,因为UILabel具有内在内容大小,因此它们的宽度和高度由其内容而非约束指定(除非您希望它们)。

你在过去的好时光里没有做过这项工作,因为当时iOS上没有Auto Layout,而且当时只有一个特定的iPhone尺寸:现在有4个。自动布局是一个现代iOS开发的必备工具。

对于相对于设备尺寸拉伸的控制,它取决于控制,但通常标准控制保持44点触摸目标规则 - 例如导航条已经变得更宽以适应更宽的手机,但他们还没有得到更高,因为更大的屏幕尺寸应该用来显示更多的内容,而不是更多的铬。

但是,是的,如果您希望控件具有基于设备大小的特定尺寸,这绝对可以通过自动布局实现。