首页 > 解决方案 > 从日志输出中识别和修复自动布局问题

问题描述

我正在准备一个以多设备信息为重点的 iOS 应用程序,几乎完全在界面构建器故事板中。我正在使用带有文本或其他内容的表格视图控制器到静态表格视图单元格中。

在特定的单元格中,我想要一个具有相同高度行但宽度不同的文本字段网格 - 取决于文本字段的长度。

网格

我正在使用包含水平堆栈视图的垂直堆栈视图,所有视图都带有对齐:填充和分布:按比例填充。

如果我不减小最小字体大小,网格在某些设备上根本不会出现,但是经过大量的摆弄,我可以让网格跨类大小出现在模拟器上......

但是,日志显示“无法同时满足约束......”

"<NSLayoutConstraint:0x600002bde620 UITextField:0x7f92608dc200.width == 45   (active)>",
"<NSLayoutConstraint:0x600002bfe210 'fittingSizeHTarget' UIStackView:0x7f925f463d70.width == 0   (active)>",
"<NSLayoutConstraint:0x600002bd2cb0 'UISV-canvas-connection' UIStackView:0x7f925f463d70.leading == UITextField:0x7f92608dc200.leading   (active)>",
"<NSLayoutConstraint:0x600002bd2d00 'UISV-canvas-connection' H:[UITextField:0x7f926081b200]-(0)-|   (active, names: '|':UIStackView:0x7f925f463d70 )>",
"<NSLayoutConstraint:0x600002bd4be0 'UISV-spacing' H:[UITextField:0x7f92608dc200]-(0)-[UITextField:0x7f926081b200]   (active)>"

我从https://www.wtfautolayout.com了解到的意思是:

TextField1 的宽度应等于 45。

StackView 的宽度应该等于 0。

StackView 的前沿应该等于 TextField1 的前沿。‡</p>

StackView 的后沿应等于 TextField2 的后沿。‡</p>

TextField2 的前沿应该等于 TextField1 的后沿。‡</p>

后三个看起来很熟悉,但我没有安装并且找不到宽度限制(我猜是基于内容的)。

然后日志报告说打破上面列表中的第一个约束似乎是解决方案,但是另一个非常相似的日志错误随后出现了略有不同的值 - 可能是网格中的下一行。

我的问题在于准确确定发生这种情况的位置、发生原因以及如何有效地解决它。

标签: iosuicollectionviewautolayoutuistoryboardnslayoutconstraint

解决方案


看起来 UITextField 宽度在情节提要中设置为 45 作为约束。

Symbolic constraint在 XCode中添加UIViewAlertForUnsatisfiableConstraints并尝试调试问题。

在此处输入图像描述


推荐阅读