调试时“无法同时满足约束”

时间:2014-12-28 11:36:09

标签: ios objective-c autolayout nsautolayout

以下是我在调试区域收到的错误消息。它运行正常,没有任何错误,除了我收到此错误。这会阻止苹果接受应用吗?我该如何解决?

( "<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)]>

1 个答案:

答案 0 :(得分:2)

我猜这种情况发生在iPhone 6的UITableView上。

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

您自己添加的约束|-34-[centerView(=300)]-34-|将创建一个368点的单元格宽度。

自368!= 375以来,这不会奏效。

你有几个选择。

  1. 将约束转换为不相等的约束,即使居中视图的宽度大于或等于&#34;。在代码中看起来像这样:|-34-[centerView(>=300)]-34-|
  2. 用容器中的&#34;水平中心约束你的centerView&#34;约束,保持宽度约束并摆脱边距约束。
  3. 完全摆脱宽度约束。宽度将根据单元格宽度而变化。例如|-34-[centerView]-34-|,这将导致iPhone 6的宽视角为307,在iPhone 6s上将为346点宽,在iPhone 5上将为252点宽。
  4. 正如你所说,如果系统违反了width = 300约束,应用程序就可以运行,所以你可以自己删除那个约束。如果它在没有这种约束的情况下工作,那就没有意义了。

    同时具有两个边距约束和宽度约束并没有意义并且无法实现自动布局的目的。