我在updateConstraints
中使用Masonry在代码中创建自动布局约束:
我在控制台日志中获得以下内容:
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:0x7f8eabc684e0 Demo.View1:0x7f8eabc34680.top == Demo.View2:0x7f8eabc3ef20.bottom + 10>",
"<MASLayoutConstraint:0x7f8eabc39420 Demo.View1:0x7f8eabc34680.top == Demo.View2:0x7f8eabc3ef20.bottom + 40>"
)
Will attempt to recover by breaking constraint
<MASLayoutConstraint:0x7f8eabc39420 Demo.View1:0x7f8eabc34680.top == Demo.View2:0x7f8eabc3ef20.bottom + 40>
为什么它没有更新约束?
更新
BTW:我正在使用故事板。
答案 0 :(得分:2)
这里的错误消息提供了很好的建议
以下列表中的至少一个约束可能是一个 你不想要。试试这个:(1)看看每个约束并尝试 找出你不期望的; (2)找到添加的代码 不需要的约束或约束并修复它。
并帮助打印出来
"<NSLayoutConstraint:0x7f8eabc684e0 Demo.View1:0x7f8eabc34680.top == Demo.View2:0x7f8eabc3ef20.bottom + 10>"
"<MASLayoutConstraint:0x7f8eabc39420 Demo.View1:0x7f8eabc34680.top == Demo.View2:0x7f8eabc3ef20.bottom + 40>"
注意两个约束和对象引用之间的相似性
view1
的顶部应低于view2
的底部10或40。不能两个都这么一个?当您使用Masonry
时,我怀疑它是您想要的MASLayoutConstraint
。
找出NSLayoutConstraint
的来源。它不是一个自动化的,因为它们在它们中有波浪形。所以要么你把它放在你的代码中,要么它来自XIB / Storyboard。
你可以在Xcode中使用正则表达式查找,如果它是前者,它会更容易。我可能试试这个。
通过搜索图标点击披露。您可以插入各种模式。
我可能会将此作为首发
答案 1 :(得分:0)
您没有向我们展示您的约束,因此很难说出错误。
我不知道为什么但你不能用multipliedBy这样的相对值来更新约束。你可以做的是将约束更新为常量。并且您可以相对于屏幕尺寸计算常数。像这样:
_height_y = -self.view.frame.size.height*0.25;
[_phoneField updateConstraints:^(MASConstraintMaker *make) {
make.baseline.equalTo(self.view.centerY).with.offset(_height_y);
}];