iOS - AutoLayout'无法同时满足约束'

Posted

技术标签:

【中文标题】iOS - AutoLayout\'无法同时满足约束\'【英文标题】:iOS - AutoLayout 'Unable to simultaneously satisfy constraints'iOS - AutoLayout'无法同时满足约束' 【发布时间】:2014-12-08 03:20:18 【问题描述】:

我正在尝试修复在运行我的应用程序时不断遇到的这些错误。

我有一个使用原型单元格的 UITableView,尽管 Xcode Storyboard 中没有为约束问题列出任何错误,但我一直收到这些错误。 不知道如何阅读这些错误中的大部分,希望有人能帮助我吗?

应该拉伸整个单元格宽度/高度的背景 UIImageView:

(
    "<NSLayoutConstraint:0x174086c20 UIImageView:0x1741e7100.width == 2.5*UIImageView:0x1741e7100.height>",
    "<NSLayoutConstraint:0x174087530 H:|-(0)-[UIImageView:0x1741e7100]   (Names: '|':UITableViewCellContentView:0x174181e10 )>",
    "<NSLayoutConstraint:0x1740875d0 V:[UIImageView:0x1741e7100]-(0)-|   (Names: '|':UITableViewCellContentView:0x174181e10 )>",
    "<NSLayoutConstraint:0x174087620 H:[UIImageView:0x1741e7100]-(0)-|   (Names: '|':UITableViewCellContentView:0x174181e10 )>",
    "<NSLayoutConstraint:0x174087670 V:|-(0)-[UIImageView:0x1741e7100]   (Names: '|':UITableViewCellContentView:0x174181e10 )>",
    "<NSLayoutConstraint:0x170088890 'UIView-Encapsulated-Layout-Width' H:[UITableViewCellContentView:0x174181e10(375)]>",
    "<NSLayoutConstraint:0x1700888e0 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x174181e10(160)]>"
)

UIImageViews (5) 假定为匹配宽度/高度,以单元格中的第 3 个 UIImageView 为中心并且彼此等距(当旋转到横向时,这些项目保持居中并且与左/右的距离在第一个/最后一个单元格上只会增加):

(
    "<NSLayoutConstraint:0x174086e00 Bobblehead_TV.BobbleheadImageView:0x100715ff0.width == 0.5*Bobblehead_TV.BobbleheadImageView:0x100715ff0.height>",
    "<NSLayoutConstraint:0x1740873a0 Bobblehead_TV.BobbleheadImageView:0x100715ff0.width == Bobblehead_TV.BobbleheadImageView:0x1007180e0.width>",
    "<NSLayoutConstraint:0x1740873f0 H:|-(0)-[Bobblehead_TV.BobbleheadImageView:0x100715ff0]   (Names: '|':UITableViewCellContentView:0x174181e10 )>",
    "<NSLayoutConstraint:0x174087490 Bobblehead_TV.BobbleheadImageView:0x100715ff0.top == UIImageView:0x1741e7100.top>",
    "<NSLayoutConstraint:0x1740874e0 Bobblehead_TV.BobbleheadImageView:0x100715ff0.bottom == UIImageView:0x1741e7100.bottom>",
    "<NSLayoutConstraint:0x1740875d0 V:[UIImageView:0x1741e7100]-(0)-|   (Names: '|':UITableViewCellContentView:0x174181e10 )>",
    "<NSLayoutConstraint:0x174087670 V:|-(0)-[UIImageView:0x1741e7100]   (Names: '|':UITableViewCellContentView:0x174181e10 )>",
    "<NSLayoutConstraint:0x174087710 Bobblehead_TV.BobbleheadImageView:0x1007207d0.width == Bobblehead_TV.BobbleheadImageView:0x1007180e0.width>",
    "<NSLayoutConstraint:0x174087800 H:[Bobblehead_TV.BobbleheadImageView:0x100715ff0]-(>=0)-[Bobblehead_TV.BobbleheadImageView:0x1007207d0]>",
    "<NSLayoutConstraint:0x174087850 UITableViewCellContentView:0x174181e10.centerX == Bobblehead_TV.BobbleheadImageView:0x1007180e0.centerX>",
    "<NSLayoutConstraint:0x1740878a0 H:[Bobblehead_TV.BobbleheadImageView:0x1007207d0]-(>=0)-[Bobblehead_TV.BobbleheadImageView:0x1007180e0]>",
    "<NSLayoutConstraint:0x170088890 'UIView-Encapsulated-Layout-Width' H:[UITableViewCellContentView:0x174181e10(375)]>",
    "<NSLayoutConstraint:0x1700888e0 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x174181e10(160)]>"
)

【问题讨论】:

您是否正在调整或设置 UITableViewCellContentView 或 BobbleheadImageView 的框架?我还建议删除情节提要中的所有约束并一一重新添加。 除了根据 iPhone 还是 iPad 在 'estimatedHeightForRowAtIndexPath' 和 'heightForRowAtIndexPath' 中设置高度之外,不要以编程方式调整任何东西的大小。这些高度与原型高度不同,只是因为故事板默认使控制器为 600x600。我想避免删除所有约束并尽可能重新添加,因为有很多约束,而且我花了很长时间才让它在运行应用程序时真正完美地工作。 与设置高度有关。你能删除单元格顶部和底部的约束,看看它是否至少消除了错误? 【参考方案1】:

应该拉伸整个单元格宽度/高度的背景 UIImageView:

您希望图像视图拉伸整个单元格,但您有一条规则 UIImageView:0x1741e7100.width == 2.5*UIImageView:0x1741e7100.height 将纵横比锁定为 1:2.5。您需要删除此规则。

假设匹配宽度/高度的 UIImageViews (5),以单元格中的第三个 UIImageView 为中心,并且彼此之间的距离相等(当旋转到横向时,这些项目保持居中,并且从左/右的距离在第一/最后一个单元格只是增加):

这个要复杂得多,但我会冒险猜测它是相同的纵横比问题。这次是Bobblehead_TV.BobbleheadImageView:0x100715ff0.width == 0.5*Bobblehead_TV.BobbleheadImageView:0x100715ff0.height,它将纵横比锁定在 1:0.5。

【讨论】:

【参考方案2】:

我的朋友,

原因可能是 1:您没有足够的约束来满足布局。或者 2:您添加的约束超出了要求。

因此布局不明确。它很困惑,所以警告。

我的意见是重新检查您的所有约束。并提供最小的限制,但要具体。 谢谢

【讨论】:

以上是关于iOS - AutoLayout'无法同时满足约束'的主要内容,如果未能解决你的问题,请参考以下文章

UIStackView“无法同时满足约束”“压扁”隐藏视图

字符串翻译后 AutoLayout 约束冲突

当 AutoLayout 在调试控制台中记录无法满足的约束时,如何使我的应用程序崩溃?

iOS:无法同时满足约束

iOS 11:“无法同时满足约束”

无法同时满足约束 iOS