1

我在理解Autolayout以及它对除我之外的其他所有人的出色工作方式方面遇到了很多麻烦。问题是,当他们最终为我工作时的约束,例如 iPad,不符合另一个像 iPhone4s 或其他东西,因此要么这导致冲突的约束,要么根本不按我想要的方式工作(例如,该按钮将出现在 iPad 上的文本字段附近,而在 iPhone 上则不是很近)。我已经阅读了 Raywenderlich 的 Adaptive Layout 教程以及Steven Lipton 的关于 Autolayout (Practical AutoLayout) 的书并且仍然面临很多麻烦。请帮帮我。它是如此令人沮丧,以至于我想完全放弃编码并最终成为一名僧侣之类的...... x(

编辑

因此,为了进一步帮助您,我将在一些快照的帮助下解释某些东西对我不起作用。我最初的想法是显示 4 个视图,每个视图都包含一个文本字段,按下特定按钮即可通过 CoreAnimation 进行转换。ViewController 的视图在背景中有一个图像、一个后退按钮、4 个视图、一个进度条和一个显示每个视图的按钮。问题如下;尽管整个视图在模拟器上看起来很合适,但我可以在 xcode 的终端中看到冲突。

包含所有元素的图像:

包含所有元素的图像

有冲突的图像:

有冲突的图像

但不知何故,如果我解决了冲突,自动布局不会在所有设备上按要求运行。例如

没有冲突,但下一个按钮隐藏在 iPhone4s 中文本字段的点击上:

没有冲突,但下一个按钮隐藏在 iPhone4s 中文本字段的点击上

在 iPad 的情况下没有冲突,并且 Next 按钮非常易于访问:

没有冲突,下一步按钮非常容易访问

我如何才能将其在所有设备上以相同且连贯的方式工作。请帮忙谢谢。

4

3 回答 3

1

要理解的一件事是,对于差异很大的屏幕尺寸,AutoLayout 并不能解决您的所有问题(而且我仍然觉得尺寸类使用起来很麻烦)。我通常坚持为手机和平板电脑使用两个不同的 xib,连接到同一个视图控制器。如果可以的话,放弃对 iOS 7 的支持,这样就消除了很多关于 AutoLayout 的麻烦。

编辑

一定要使用自动布局。我所说的只是通常最好有两个不同的xib,以实现截然不同的分辨率,但当然在它们中都使用自动布局。

于 2015-12-09T12:14:21.127 回答
1

我想从我关于自动布局的经验中分享几件事。

  1. 如果您希望元素出现在特定位置(右侧 20 点和顶部 40 点),您需要调整情节提要中的按钮并添加尾随和顶部约束。Xcode 会给你建议来修复元素的高度/宽度。如果您想要与故事板中完全相同的高度宽度,请调整元素大小或添加高度和宽度约束。
  2. 如果您希望元素根据不同屏幕尺寸的高度宽度扩展/收缩,请添加 -leading、-trailing、-top 和 bottom 约束。
  3. 重要提示:当我们“固定”元素(例如按钮)(顶部、底部、前导、尾随)时,这些约束是相对于其他元素(例如其他按钮)添加的。在这种情况下,请确保其他元素有约束。否则 Xcode 将给出缺少约束的错误。
  4. 不要像 Xcode 建议的那样添加缺少的约束,因为 Xcode 会添加一些约束,这会导致意外的大小。

现在关于您的问题:当键盘出现时,您可以向上移动视图(相对于键盘的高度。如果您想在不以编程方式更改约束的情况下实现此目的,答案将对您有所帮助。否则,如果您正确添加了约束而不是 create 和 IBOutlet顶部元素的顶部约束,并从该约束的常量中减去一个键盘高度(150)的常量。当键盘消失时,您还需要在该约束的常量中添加键盘高度(150)。

于 2015-12-09T13:50:29.510 回答
0

下一个按钮被键盘隐藏的问题与自动布局没有直接关系,尽管自动布局可以帮助管理它。问题只是您在屏幕上使用的空间多于可用空间。

有几种方法可以解决这个问题:

  • 您可以将内容嵌入到滚动视图中,因此如果滚动视图的内容超出可用高度,用户可以上下滚动屏幕。自动布局在这里会有所帮助:您将设置从滚动视图底部到底部布局指南的约束,向该约束添加一个出口,在您的代码中,您可以观察键盘隐藏/显示/更改通知并调整该约束的常数相应地

  • 您调整布局,使所有内容始终可见,即使键盘向上,也无需更改任何位置,无论键盘是否向上。这意味着您不会使用键盘显示的任何空间

  • 您可以根据键盘的存在动态调整布局。这会将第一个选项中的约束与其他约束结合起来,以便在该约束移动时移动事物。

在你做任何事情之前,想想你希望事情在不同的场景中看起来如何。然后构建将给出此结果的约束。自动布局无法猜测你想要做什么,你需要对你想要的布局有一个准确的想法。

于 2015-12-09T14:07:37.563 回答