Xcode 6 不遵守自动布局约束

Posted

技术标签:

【中文标题】Xcode 6 不遵守自动布局约束【英文标题】:Xcode 6 not respecting autolayout constraints 【发布时间】:2015-04-01 14:45:35 【问题描述】:

我最初希望我的故事板文件可以放大到模拟器/设备屏幕的大小。我无法弄清楚如何在 Xcode 6 中执行此操作。 然后,我的替代想法是使用界面生成器对我的项目中的按钮设置约束。我在按钮上放置了一些约束——例如,我试图通过单击视图的背景然后连接到按钮(然后选择“在容器中水平居中”)在一个按钮上放置居中约束​​。但是当我运行我的程序时,按钮不会重新居中。这同样适用于我放置后沿的约束。 XCode 简单地忽略了所有这些。如果我运行 iPhone 6 模拟器,按钮不会增加填充模拟器的空间(它们在大小意义上“按比例放大”,但不会自行移动)。我做错了什么?

【问题讨论】:

【参考方案1】:

确保所有约束线都是蓝色的(不是橙色,并且您没有警告说您的按钮将在运行时显示不同。如果您遇到任何这些问题,一个好的开始步骤是删除坏的(橙色)约束并使用“添加缺少的约束”重新运行项目并检查布局。

另一种方法是删除所有约束并为您的一个按钮使用“添加建议的约束”,然后根据该按钮创建其余约束。

【讨论】:

感谢您的回复。我已经链接到问题的图像。我不确定这是否是您所说的“坏”约束。谢谢你。 docs.google.com/document/d/… 这正是我的意思。删除该橙色约束并仅在视图顶部和左侧按钮上创建一个新约束。那应该很好用。告诉我进展如何。 好的,那么我应该单击哪个选项来添加该约束(“顶部空间到顶部布局指南”)? (刚刚在谷歌文档的顶部添加了一张图片) ("top space to top layout guide") 然后为后退按钮添加间距约束。 ("top space to top layout guide") 然后在左侧的后退按钮上添加另一个间距约束。这将使选择按钮有两个约束,如果后退按钮位置合适,应该就足够了。【参考方案2】:

不是 Xcode 6 的问题,是你无法熟悉自动布局。如果您想将按钮放在整个视图的中心,请单击 pin 并单击垂直居中和水平居中。然后单击问题并单击高度和宽度。现在您的按钮将位于整个视图的中心,并且将具有固定的宽度和高度。如果您对自动布局有任何问题,那么您可以使用图像进行评论。

【讨论】:

感谢您的及时回复。这是不成功尝试的示例图像(在下一条评论中)。将图像拖放到 cmets 部分似乎不起作用。 docs.google.com/document/d/… 没有。我在创建文件的时间压力下,所以我只是禁用了自动布局并以另一种方式重新排列。完成了整个设置限制,但永远无法让它发挥作用。如果您想了解我们的工作内容,请查看 google 文档,但无法弄清楚。 项目有多大,如果它只是一些小的演示版本,那么我可以修复自动布局部分并发送给你【参考方案3】:

你做错的是你没有设置正确的约束。 正如其他人指出的那样:

确保您已设置所需的最少约束数。

1234563组件intrinsicContentSize 方法)。

如果您自己强制设置大小,则至少需要 4 个约束。 (例如:上 + 下 + 左 + 右,或 centerX + centerY + 宽度 + 高度)

如果您在情节提要中设置约束,您应该会看到警告和错误(约束与情节提要布局无关时的警告,以及无法解决约束集时的错误:您的约束不足或过多)。信任 Storyboards 警告,这里有帮助。

如果您创建“垂直居中”或“水平居中”约束,请确保该常数等于 0。 (在你的截图中,它等于 12)

您应该列出您设置的所有约束,并确保它们一起有意义。一旦您对这些感到满意,您就会发现 XCode 不会简单地“忽略”您的约束。

【讨论】:

感谢您的及时回复。警告告诉我选择按钮的框架在运行时会有所不同。此外,将常数更改为等于 12(使其为零)会使约束变为橙色,从而使其无效。 不,“橙色”并不意味着约束“无效”,它仅表示情节提要布局与约束不同步。所以这意味着你不能信任 XCode 预览,只要所有这些警告都没有解决。你有几种方法可以“解决”这个问题,update frames 通常是我在定义了一组我有信心的约束后使用的方法 一旦你没有更多的警告,你可以直接更新约束常量,故事板布局将被“实时”更新 我唯一的警告是导航项中不支持普通样式。并且所有约束都针对选择按钮进行了布局。 那么就没有问题了吗? :)

以上是关于Xcode 6 不遵守自动布局约束的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 子视图不遵守自动布局约束

不遵守自动布局底部间距约束

UIView 不遵守 UIScrollView 中的自动布局约束

当单元格的高度略微增长时,为啥我的标签不遵守我的自动布局约束?

Xcode 6.3 故事板自动布局约束

滚动视图不在自动布局 xcode 6.4 中滚动