【问题标题】:Is Xcode 7 auto layout broken or just difficult to useXcode 7 自动布局是否损坏或难以使用
【发布时间】:2016-06-26 17:02:09
【问题描述】:

自从迁移到 Xcode 7 后,我收到了很多在 Xcode 6 中没有收到的警告 - “ - 文本字段的框架 - 在运行时会有所不同”。

我已遵循基于“解决自动布局问题”的所有建议解决方案,但这实际上破坏了我建立的布局,其中对象不再位于我想要的位置。在我看来,这是一个错误。

为了测试这一点,我创建了一个新的 VC 并添加了一个标签、按钮和文本字段。对于按钮和标签,我设置约束以建立垂直位置,然后固定高度和宽度,最后在容器上水平居中。这就是我一直使用自动布局的方式,它可以正常工作,显示蓝色约束并且没有错误或警告。问题是我已经拉伸到 VC 的左右指南的文本字段。为此,我添加了垂直、左右约束和固定高度,并留下警告 - ““圆形文本字段”的框架在运行时会有所不同。我在这里没有做任何复杂的事情,只是使用我在以前版本的 Xcode 中一直使用的自动布局。所以我只能看到以下几种可能:

  1. 这是一个错误,无法正常工作。它与 Xcode 指南相关联,但位置偏离了 4 个单位……为什么?
  2. 不再支持我一直使用自动布局的方式,我需要以不同的方式使用它。当我使用重置为建议的约束时,它会删除右手约束并将其替换为中心约束以与其上方的按钮对齐。我不明白这些建议的限制是如何工作的,所以我自己也不会这么想。
  3. 如果不让 Xcode 为您做,就不能正常应用约束了吗?当我过去遇到问题时,我只需清除约束并重新应用它们,它总是有效的。现在,即使使用这个非常简单的测试 VC,我自己也无法成功应用约束!!

我的印象是大多数人发现自动布局存在问题,因此很少有人使用它,但除非我们查明此类问题的根源,否则它将继续存在。我对自动布局工作方式的任意更改感到沮丧。在我报告错误之前,我想从其他有自动布局经验的人那里获得意见。

【问题讨论】:

  • 不,这不是错误,在您的故事板中 Pin Constraint 选项的右侧有一个三角形图标。单击它,您将看到“更新框架”选项。选择每个抱怨在运行时更改框架的视图,并通过单击该选项来更新它的框架。
  • 嗨,甘道夫,感谢您的反馈,但我遇到的问题是,如果您更新框架或约束或重置为建议的约束,它会改变您的布局。如果你在一个 VC 上有很多对象,并且你让它们按照你想要的方式对齐,那么让 Xcode 将某些东西移到左边来解决它所担心的问题是没有好处的。我要说的一点是,当 Xcode 6 中的同一个项目在没有警告的情况下运行良好时,为什么在 Xcode 7 中开始发生这种情况。再一次对我来说似乎是一个错误。
  • 使用我的简单文本字段示例,正如我所解释的,我使用标准指南将文本字段拉伸到距屏幕边缘的固定距离,即 20 个单位,但我收到警告说它应该16岁!!!!当我的对象捕捉到的标准准则是 20 个单位时,为什么它应该是 16 个单位?如果我遵循您的建议并更新框架,它会将文本字段左右拉伸 4 个单位,因此它现在距离屏幕边缘更近 4 个单位。这简直是​​不合逻辑的,就像 Apple 更改了编译器中的指南但忘记更改 IB 一样。
  • 有没有人对此有任何进一步的 cmets,我仍然不明白为什么每个人似乎都接受这个工作正常?我将作为错误提交并报告。
  • 我无法从你的陈述中找出任何东西 问题是 Xcode 7 似乎希望这些距离视图边缘 16 个单位,但指导方针是 20。您能否创建一个带有 problem unresolved 的基本示例代码,我可能会在查看后尝试回答。我一直在使用 Xcode 6 的 AutoLayout,现在我在 Xcode 7.2 上,但从未见过我应该称之为错误的情况。

标签: ios autolayout xcode7


【解决方案1】:

界面构建器对于 AutoLayout 来说是相当精神分裂的。它在您的视图上维护 2 个基本独立的设置:它们的框架和它们的约束。框架在运行时被忽略并被约束覆盖。

如果视图的框架与应用约束所产生的框架不匹配,则会收到警告。

要修复它,请使用编辑器菜单>解决自动布局问题>更新框架。 (“解决自动布局问题”命令也可以从三角形图标中获得,正如 Gandalf 在他的评论中提到的那样。)

这会调整视图的大小和位置以匹配您设置的约束。

“重置为建议的约束”命令相反,并根据(我认为)视图的位置丢弃和替换您的约束。我从来没有发现这很有用。我会说,一旦你开始设置约束,最好避免它。

【讨论】:

  • 嗨,Duncan,感谢您的反馈,但根据我对 Gandalf 的回复,这如何解释 4 单位偏移量,以及为什么这发生在 Xcode 7 中而不是以前。当您在 VC 中放置一个文本字段时,您希望使用自动布局来拉伸到其显示的屏幕的边缘,或者如果用户从纵向切换到横向,那么您需要一个相对于 VC 上的点的约束。如果您拉伸到蓝色指南,然后应用左右约束,则该约束的值为“0”,即使它距视图边缘 20 个单位。继续...
  • 实际的约束是“Trailing space to superview”等于零,“Leading space to superview”又为零。问题是 Xcode 7 似乎希望这些距离视图边缘 16 个单位,但准则是 20,因此它会生成警告,但据我所知,这个警告是错误的。我仍然看不出这不是一个错误。难道我们不只是为自动布局找借口,以至于每次添加对象时都需要让 Xcode 更正它,因为它不再可能在没有收到警告的情况下添加东西?
  • 自动布局很难理解
猜你喜欢
  • 1970-01-01
  • 2016-03-04
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
相关资源
最近更新 更多