自动布局:Xcode 6:居中UI元素

10

我正在使用Xcode 6中的Interface Builder制作应用程序,但在不同尺寸的屏幕上无法使文本字段和按钮居中。

我原以为只需要选择容器中的水平和垂直居中,但使用自动布局时似乎并非如此。事实上,我已经尝试过调整一些设置,但仍然没有得到想要的效果。

我希望能够在任何尺寸的iPhone屏幕上看到我的所有按钮和文本字段,而现在模拟器只显示这些UI元素的部分内容:

在iPhone 6模拟器中查看

我还想在故事板中完成这个操作,而不是在代码中进行,因为我目前还不具备在代码中操作的水平。

3个回答

13

步骤 1:确保您的尺寸类至少覆盖 iPhone 屏幕的纵向视图。因此,请将尺寸类更改为 "wCompact hRegular"。

步骤 2:在正确设置尺寸类后,将UITextFields和UIButton添加到您的Storyboard中。对我来说,它看起来像这样-

进入图像描述

步骤3: 在开始添加约束之前,您需要记住两件事-

a. 您的元素(UITextView、UIButton、UIView 或任何组件)需要明确其起始位置,

b. 您的元素需要知道其尺寸,即其高度和宽度。

在这种情况下,由于您想要将元素居中,我只是假设它需要从左侧边缘起始点中心开始,并且应该在 iPhone 屏幕的右侧边缘处结束 10 种规模。现在,这意味着它的宽度将根据屏幕大小而异,但其高度将相同。

因此,我按照以下方式添加了第一个文本框的约束-

进入图像描述

请注意,在大小检查器中,我设置了文本框的起始点、x 和宽度,使其距离左边缘和右边缘都为 10 pt。别担心,这只是简单的数学计算。

对于第二个textField,我以相同方式添加了约束-

进入图像描述

最后,对于按钮,约束如下所示-

进入图像描述

现在,您可以开始了。一切都居中了。


15
我想哭。而且我觉得安卓的XML布局很糟糕。 - Josh
一旦你熟悉了自动布局,它将成为你的好朋友,但是学习曲线可能非常陡峭,因为你必须通过试错来真正理解你应该做什么和你不应该做什么。此外,有许多方法可以实现相同的目标。 - Natasha
@Josh 如果你不得不放弃XAML去使用这种垃圾,你会哭的。这就是生活...当微软撇下其诺基亚手机收购时。我们必须咬紧牙关。 - Stonetip
是的,没错,在学校我尝试了一下WinPhone,它似乎是一个很好的稳定平台:稳定、资源高效、漂亮的UI、便宜的硬件、好的IDE...太遗憾了,它没有商业上的成功。@Stonetip - Josh
@natasha:你能推荐一些学习自动布局的好资源吗?最好有一些指南和示例。自从我发布这个问题以来,我已经取得了很大进展,但是在自动布局方面还有更多需要学习的地方! - cheznead
说实话,学习自动布局更像是一个试错的过程。在不同的教程中,可能有不同的方法来完成相同的事情,但只有当你关闭这些教程并尝试自己做一些东西时,才能完全掌握这些概念。然而,首先要通过每一个可能的教程,因为没有任何教程是错误的,它们会教你不同的方法。如果您有任何具体问题,请务必在Stack上发布。 - Natasha

3

通过在Storyboard窗口底部使用大小类别选择器,将大小设置为任意宽度和任意高度,然后按照下面的自动布局约束进行操作。这样就可以实现你想要的效果。

enter image description here

首先选择你想要设置自动布局的视图,然后从Storyboard的右下角选择“固定”选项,接着按照上图所示添加约束,并单击“添加4个约束”按钮。

重复上述过程,对所有视图设置约束,具体设置方法是:除了最后一个按钮需从顶部、左侧、右侧固定且高度固定外,其他所有视图的顶部、底部、左侧和右侧都需固定


默认情况下,它可以是任何宽度和高度。我应该在哪里定义常量? - cheznead
@shinnyWhack 如果默认情况下宽度和高度都是任意的,那么只需逐个选择您的视图,并按照上面的图像中所示设置约束即可。固定所有视图的顶部、底部、左侧和右侧约束,除了最后一个按钮应该从顶部、左侧、右侧和固定高度进行固定。 - iHulk
但是我在哪里修复这些约束,怎么修复呢?(我不想通过编程来实现这些约束)。我应该使用自动布局吗?如果是的话,我应该使用哪个操作:对齐还是固定?由于我是一个完全的初学者,所以这些操作很难处理。 - cheznead
@shinnyWhack,我已经更新了我的答案,请再次检查,希望这次你能明白。 - iHulk

1

你需要在故事板窗口底部使用大小类别选择器。

对于 iPhone 6 或 6 Plus 横屏,您可以选择紧凑的宽度和常规的高度,如下所示:

enter image description here

然后你需要为给定的设备执行自动布局操作。

好的,一旦我选择了纵向布局,之后在自动布局中需要做什么呢?我希望它适用于iPhone 6,因为我只使用纵向模式,所以不需要适应横向模式。 - cheznead

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接