【发布时间】:2021-02-11 22:00:03
【问题描述】:
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.
(
"<MASLayoutConstraint:0x2831fb1e0 LMTextField:0x105836200.left == LMLoginView:0x1050429e0.left + 22.08>",
"<MASLayoutConstraint:0x2831fbba0 LMTextField:0x105836200.right == LMLoginView:0x1050429e0.right - 22.08>",
"<NSLayoutConstraint:0x2836c1a90 LMLoginView:0x1050429e0.width == 0>"
)
Will attempt to recover by breaking constraint
<MASLayoutConstraint:0x2831fbba0 LMTextField:0x105836200.right == LMLoginView:0x1050429e0.right - 22.08>
我将 loginview 添加到 logincontroller 的视图中。
[self.lmLoginView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(ws.aqaraLogoImgView.mas_bottom).offset(60 * kWidthScale);
make.left.right.bottom.mas_equalTo(ws.view);
}];```
登录视图是超级视图。它包含帐户输入控件 LMTextField:0x105836200
[self.accountInput mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(ws).offset(0);
make.left.mas_equalTo(ws.mas_left).offset(20 * kWidthScale);
make.right.mas_equalTo(ws.mas_right).offset(-20 * kWidthScale);
make.height.mas_equalTo(40 * kWidthScale);
}];
但是为什么约束冲突呢?我很困惑。
【问题讨论】:
-
我能看到的最好的结果是你给了东西一个
left、right和width约束,但是 actual 宽度(当只应用左和右约束)导致与 that 约束不同的宽度。它决定打破正确的约束,而不是自动布局引擎泄漏宽度约束...... -
.... 你有两个选择。 (请记住,在
init中添加约束并没有做错任何事情,而是告诉布局引擎处理两个冲突的事情。)首先,您可以尝试删除宽度约束 - 我会打赌你会得到一个你没想到的宽度!第二个修复比较棘手,但如果你有这个宽度限制有一个特定的原因,它会起作用......给你的限制优先级。这将告诉布局引擎在发生冲突时您更愿意打破哪个约束。 -
另外,通常你应该使用前导和尾随,而不是左右,以便你的布局正确地适应从右到左的语言环境
-
我没有添加登录视图宽度约束。我添加左右上下约束作为代码显示。
标签: ios objective-c autolayout