垂直位置不明确,约束冲突
Posted
技术标签:
【中文标题】垂直位置不明确,约束冲突【英文标题】:Vertical position is ambiguous, conflicting contraints 【发布时间】:2018-10-28 13:49:12 【问题描述】:我在视图控制器中收到以下警告,我想了解原因。请看图片。
感谢您的帮助!
【问题讨论】:
您希望通过>= 16
约束实现什么目标?由于width = 200
和width:height = 5:8
的约束,您的卡具有固定大小200 x 320
。您的卡片在安全区域中水平和垂直居中,因此完全指定了大小和位置,没有>=
约束。此外,在卡片两侧设置>=
约束是不明确的信息。就像我告诉你站在距离两端至少 1 米的桥上一样。有很多方法可以做到这一点。
【参考方案1】:
你给它一个特定的width
,即 200,但你也告诉 UIView
有一个 leading
和一个 trailing
到 Safe Area
,每个 16 分。然后你还告诉UIView
被认证,但你也给了它一个bottom
约束。所有这些都使它成为您的UIView
的位置。
试试这个:
删除您设置的比率 删除leading
,然后删除trailing
约束或width
约束
同时删除 bottom
约束
【讨论】:
实际上,我想实现以下约束:>= 上下左右各 16 个点,纵横比为 5:8,宽度尽可能高,同时仍满足之前的约束。我不明白为什么会有相互矛盾的约束……为什么我的立场会模棱两可?再次感谢! 如果您有底部、左侧、顶部和右侧,这足以满足您的约束。你不需要宽度,也不需要高度,也不需要 5:8。让我这样说吧,例如,如果您设置宽度为 300,并且您也有 15 个点的前导和尾随,这是模棱两可的,因为您将视图设置为 200,但您还希望它距左侧 15 个点并且正确的。编译器需要打破一个约束,因为它不能满足所有这些。您可能想看看一些 Autolayout 教程,以了解约束是如何工作的。 实际上至少只有 16 个点,>= 16。我只是想确保矩形在横向和纵向模式下看起来都不错。我需要宽高比为 5:8。它实际上应该是一张卡片。然后,在设置完所有这些之后,我希望卡片占用尽可能多的空间。我认为可以使用优先级来做到这一点,但它显然不起作用。我正在关注 Paul Hegarty 的斯坦福 Swift 课程:itunes.apple.com/ca/podcast/developing-ios-11-apps-with-swift/… 哦,我想我明白了,当我移除顶部约束时它会起作用!【参考方案2】:在我的 Xcode 9.4.1 Link to the image 上运行良好。能否请您点击View Controller Scene
旁边的红色箭头,看看约束不明确的原因是什么。
【讨论】:
你刚刚让我意识到我必须移除顶部约束!实际上我也删除了正确的约束,我意识到我只需要一个垂直和水平的约束,因为矩形是居中的。非常感谢!【参考方案3】:尝试移除高度和宽度并添加前导、顶部、尾随、底部约束,以使视图在所有设备中自动调整大小。
【讨论】:
如果您将width
和height
与centerX
和centerY
一起设置,那么您真的不需要top
和bottom
。
是的,但它应该在所有设备中自动调整视图大小吗?不使用这些约束(顶部和底部)
如果你想要UIView
的动态大小,你不应该修复width
和height
。您应该设置那些 top
和 bottom
约束以扩展与设备方向相关的 UIView
。但这一切都取决于 OP 想要通过这个UIView
实现什么以上是关于垂直位置不明确,约束冲突的主要内容,如果未能解决你的问题,请参考以下文章
当 trait 集合发生变化时,就会出现约束冲突,就好像 stackview 轴没有改变一样
AutoLayout 和 Embedded stackview 约束冲突