为 UIStackview 设置约束

Posted

技术标签:

【中文标题】为 UIStackview 设置约束【英文标题】:Setting constraints to UIStackview 【发布时间】:2018-02-14 21:06:16 【问题描述】:

我最近开始使用 UIStackViews 自动布局,但一直遇到屏幕截图中的警告,我不知道如何让它们消失。

imageimage2image3image4image5任何帮助将不胜感激。

  [1]: https://i.stack.imgur.com/a4aUp.png
  [2]: https://i.stack.imgur.com/U7knK.png
  [3]: https://i.stack.imgur.com/tcPO0.png
  [4]: https://i.stack.imgur.com/Ti3IH.png
  [5]: https://i.stack.imgur.com/PMTrj.png
  [6]: https://i.stack.imgur.com/0LJh7.png

【问题讨论】:

您是否限制了您的堆栈视图?您必须完全约束 stackview.. 请添加更多细节,在尺寸检查器中显示约束。很难说是哪里出了问题…… 在将高级堆栈视图的所有四个侧面固定到实际视图@Brandon 之后,我是否需要为每个单独的堆栈视图设置约束 显示所有约束。它不在顶层。内部堆栈视图约束之一导致歧义 @staticVoidMan 我不太清楚你的意思,我已经将顶部的堆栈视图以及嵌入其中的所有其他堆栈视图固定在主视图的 4 个侧面 【参考方案1】:

您的stackView 中有许多UIViews,而UIView 没有任何内在高度,因此存在歧义。stackView 基本上不知道为内部 uiview 元素设置什么高度,因此它们将从什么 y 位置开始。

解决方案 #1:

选择包含所有其他stackViews 的最顶层stackView,并在其属性检查器中,将其分布更改为Fill Proportionally。 为后退按钮提供 X 和 Y 位置


解决方案 #2:

除了最后一个bottomSpace 之外,您对每个UIView(您的backButtonViewtitleView 等)都设置了高度限制


此外,您还不必要地嵌套了stackViews。此外,您没有必须stackView 中做所有事情。

第一个视图看起来像您想要一个带有后退按钮的顶部栏。您应该使用 navigationBarnavigationItem,除非您的设计有特殊要求,否则不需要也不应该在 stackView 中。

最后一个视图看起来您想留出空间,因此您在 stackView 中有一个 bottomSpace 视图,这两个都是不必要的。

解决方案 #3

重新设计布局并进一步简化。 对于您的布局,您可以使用单个 stackView 顺便说一句。

例如,它与您的设计不完全一致,但接近于:

【讨论】:

感谢警告已消失。真的很感激帮助,而且你是对的,有些堆栈视图是不必要的。我将以更简单的设计重新开始。 我决定采用您的第一个解决方案,因为它适用于我所追求的设计。但是,在为我的标签设置约束时,我发现自己出现以下错误:prntscr.com/ifps18 当我添加具有大于或等于关系的尾随约束时,我收到以下警告:prntscr.com/ifpu5e @AaronOwusu 您确定是标签导致了该警告吗?在您的第二个屏幕截图中,该警告仍然存在,还有一个新警告。这样的帮助有点困难。基本上你需要再熟悉一下自动布局引擎。我仍然会通过 cmets 提供尽可能多的帮助 您对我可以在哪里了解有关自动布局的更多信息有任何建议吗,youtube 有一些示例,但它们与我想要创建的东西并不真正相关。 @AaronOwusu 了解 AutoLayout,它的可能性和局限性,然后重新考虑您的设计并继续努力。试试这个教程:cocoacasts.com/welcome-to-auto-layout-fundamentals

以上是关于为 UIStackview 设置约束的主要内容,如果未能解决你的问题,请参考以下文章

如果设置隐藏,iOS UIStackView 无法同时满足约束

UIStackView 的约束在设置间距时中断

在 UIStackView 中增加 UIButton 的面积

使用 UINavigationController 时 UIStackView 无法设置底部约束

以编程方式填充 UIStackView

UIStackView 间距在未设置 updateConstraints 时打破约束