垂直位置不明确,约束冲突

Posted

技术标签:

【中文标题】垂直位置不明确,约束冲突【英文标题】:Vertical position is ambiguous, conflicting contraints 【发布时间】:2018-10-28 13:49:12 【问题描述】:

我在视图控制器中收到以下警告,我想了解原因。请看图片。

感谢您的帮助!

【问题讨论】:

您希望通过>= 16 约束实现什么目标?由于width = 200width:height = 5:8 的约束,您的卡具有固定大小200 x 320。您的卡片在安全区域中水平和垂直居中,因此完全指定了大小和位置,没有>= 约束。此外,在卡片两侧设置>= 约束是不明确的信息。就像我告诉你站在距离两端至少 1 米的桥上一样。有很多方法可以做到这一点。 【参考方案1】:

你给它一个特定的width,即 200,但你也告诉 UIView 有一个 leading 和一个 trailingSafe 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】:

尝试移除高度和宽度并添加前导、顶部、尾随、底部约束,以使视图在所有设备中自动调整大小。

【讨论】:

如果您将widthheightcenterXcenterY 一起设置,那么您真的不需要topbottom 是的,但它应该在所有设备中自动调整视图大小吗?不使用这些约束(顶部和底部) 如果你想要UIView的动态大小,你不应该修复widthheight。您应该设置那些 topbottom 约束以扩展与设备方向相关的 UIView。但这一切都取决于 OP 想要通过这个UIView 实现什么

以上是关于垂直位置不明确,约束冲突的主要内容,如果未能解决你的问题,请参考以下文章

当 trait 集合发生变化时,就会出现约束冲突,就好像 stackview 轴没有改变一样

AutoLayout 和 Embedded stackview 约束冲突

将图像居中的 iOS 约束不起作用

此视图不受垂直约束。在运行时它会跳到左边,除非你添加一个垂直约束

自动布局约束在运行时消失

更改 Iphone 中的垂直约束