调试时"Unable to simultaneously satisfy constraints"



下面是我在调试区域收到的错误消息。它运行良好,除了我收到此错误之外没有任何问题。这会阻止苹果接受该应用程序吗?我该如何解决?

( "<NSLayoutConstraint:0x7f9bdaf58890 UIView:0x7f9bdaf484e0.leading == UIView:0x7f9bdaf56e30.leadingMargin + 34>", "<NSLayoutConstraint:0x7f9bdaf58930 UIView:0x7f9bdaf56e30.trailingMargin == UIView:0x7f9bdaf484e0.trailing + 34>", "<NSLayoutConstraint:0x7f9bdaf58980 H:[UIView:0x7f9bdaf484e0(300)]>", "<NSLayoutConstraint:0x7f9bdaf5bfc0 'UIView-Encapsulated-Layout-Width' H:[UIView:0x7f9bdaf56e30(375)]>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7f9bdaf58980 H:[UIView:0x7f9bdaf484e0(300)]>

我想这发生在iPhone 6上的UITableView中。

由于单元格从 tableView 的左边缘延伸到右边缘,因此单元格的宽度需要为 375 磅。UITableView 添加了UIView-Encapsulated-Layout-Width约束来实现此目的。

您自己添加的约束|-34-[centerView(=300)]-34-|将创建 368 磅的像元宽度。

由于 368 != 375,这不起作用。

您有几个选择。

  1. 将约束转换为相等约束,即使中心视图的宽度"大于或等于"。在如下所示的代码中:|-34-[centerView(>=300)]-34-|
  2. 使用"容器中的水平中心"约束来约束中心视图,保留宽度约束并摆脱边距约束。
  3. 完全摆脱宽度约束。宽度将根据单元格宽度而变化。例如 |-34-[centerView]-34-|,这将导致iPhone 6上的307 pt宽视图,iPhone 6s上的宽视图为346磅,iPhone 5上的宽为252点。

正如您所说,如果系统违反 width=300 约束,该应用程序将正常工作,因此您可以自己删除该约束。如果它没有这种约束,那么拥有它就没有意义。

同时具有两个边距离约束和宽度约束是没有意义的,并且违背了自动布局的目的。

相关内容

最新更新