自动布局无法同时满足约束[重复]
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=--& v=--& UILabel:0x14c12f80.midX == + 237.5
的好链接,那就太棒了。
【问题讨论】:
【参考方案1】:h=
和 v=
是自动调整大小掩码被转换为约束的签名。您是否忘记在您的某个视图上设置translatesAutoResizingMasksToConstraints = NO
?
【讨论】:
以上是关于自动布局无法同时满足约束[重复]的主要内容,如果未能解决你的问题,请参考以下文章