自动布局无法同时满足约束[重复]

Posted

技术标签:

【中文标题】自动布局无法同时满足约束[重复]【英文标题】:Autolayout unable to simultaneously satisfy constrains [duplicate] 【发布时间】:2014-07-22 14:20:50 【问题描述】:

我总是在代码中创建我的视图,因此从未使用过自动布局(直到现在)。不使用 nibs 的原因是因为我更喜欢代码,并且通过 GitHub 等维护起来更简单,但这已经足够了。

我有一种情况,屏幕上有三个标签并排放置。像这样:|Label1| - some space - |Label2| - some space - |Label3|。一些空间让我们说15pts。现在我想要完成的是,当我更改标签的文本时,我会在它们上调用sizeToFit,并希望它们彼此之间保持 10 个点的距离。我知道我可以用一点数学来做到这一点,这甚至不难,但我认为自动布局会更容易、更容易理解,而且我会在这个过程中学到一些新东西。所以我做的是:

分配并初始化所有标签 给每个标签一个框架(并设置字体、文本颜色等) 将标签添加为子视图

然后我尝试像这样设置它们之间的约束:

NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"[label1]-15-[label2]-15-[label3]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(label1, label2, label3)];
[self addConstraints:constraints]; //Im subclassing an UIView that's why self

但我收到一条错误消息:

Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x14c14110 H:[UILabel:0x14c12ab0]-(15)-[UILabel:0x14c12f80]>",
    "<NSAutoresizingMaskLayoutConstraint:0x14c08b00 h=--& v=--& UILabel:0x14c12ab0.midX == + 195>",
    "<NSAutoresizingMaskLayoutConstraint:0x14c0dd90 h=--& v=--& H:[UILabel:0x14c12ab0(40)]>",
    "<NSAutoresizingMaskLayoutConstraint:0x14c1c170 h=--& v=--& UILabel:0x14c12f80.midX == + 237.5>",
    "<NSAutoresizingMaskLayoutConstraint:0x14c12f00 h=--& v=--& H:[UILabel:0x14c12f80(40)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x14c14110 H:[UILabel:0x14c12ab0]-(15)-[UILabel:0x14c12f80]>

即使我尝试仅在标签 2 和 3 上执行此操作,也会发生同样的事情。我不完全理解 NSLog 在说什么。

任何帮助将不胜感激。此外,如果您有任何关于在哪里“解码”h=--&amp; v=--&amp; UILabel:0x14c12f80.midX == + 237.5 的好链接,那就太棒了。

【问题讨论】:

【参考方案1】:

h=v= 是自动调整大小掩码被转换为约束的签名。您是否忘记在您的某个视图上设置translatesAutoResizingMasksToConstraints = NO

【讨论】:

以上是关于自动布局无法同时满足约束[重复]的主要内容,如果未能解决你的问题,请参考以下文章

自动布局警告,无法同时满足约束

SnapKit 自动布局损坏:“无法同时满足约束”

以编程方式应用自动布局约束时无法同时满足约束

使用代码创建约束 - 出现错误“无法同时满足约束”[重复]

无法同时满足约束 - Swift

自动调整 UITableViewCell 大小:无法同时满足约束