添加披露指标时,ios8单元约束被破坏

我有IOS8自动布局的问题,我可以重新创build最简单的情况是一个简单的tableView。 我设置一个静态单元格,然后只需添加一个标签。

我的目标是让标签大量填满空间,所以我对标签有三个限制。

  1. 在superview中垂直居中(我认为这很好)
  2. 将标签后边距设置为30(相对于超视图)
  3. 将标签的前导边距设置为30(相对于超视图)

这一切都非常好,并没有任何重大问题或警告完美的作品(它提醒零高度,但我不认为这是一个问题)

现在…如果我添加一个披露指标,这一切都崩溃了。 它仍然看起来不错,但我得到以下几点:

2014-10-30 15:51:46.358 ContraintIssue[25572:1586028] 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:0x7fd3f3d23390 UITableViewCellContentView:0x7fd3f3d226f0.trailingMargin == UILabel:0x7fd3f3d227e0'Label'.trailing + 30>", "<NSLayoutConstraint:0x7fd3f3d235f0 UILabel:0x7fd3f3d227e0'Label'.leading == UITableViewCellContentView:0x7fd3f3d226f0.leadingMargin + 30>", "<NSLayoutConstraint:0x7fd3f53b73b0 'fittingSizeHTarget' H:[UITableViewCellContentView:0x7fd3f3d226f0(38)]>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7fd3f3d23390 UITableViewCellContentView:0x7fd3f3d226f0.trailingMargin == UILabel:0x7fd3f3d227e0'Label'.trailing + 30> 

我不明白为什么增加一个指标会导致这样的问题,这与数字的大小没有关系,我试了很多。

有任何想法吗?

现实世界的例子是一个单元格,它有一个标签(标签),然后是另一个标签或一个文本视图,其中包含一个值,可以按照本发明进行设置。 所以第一个标签是一个固定的大小,理想的第二个标签需要是它可以的最大值,但是如果需要的话截断文本。

(请参阅添加联系人中的“铃声”或“振动设置”,以了解我想要实现的一个示例)

非常感谢,

李。

我只是有同样的问题。 我想在左边布置一个图像视图,右边有一个标签,它填充了图像视图和超级视图(这是单元格的内容视图)的右边(或尾部)边框之间的空间。 配件视图也设置为披露指标。 在你的情况下,所有基于H的冲突约束和我在日志中find的其中一个fittingSizeHTarget 。 我没有发现这意味着什么,这是从哪里来的,但是我在这里find了你的post。

以下对我来说是个窍门:

降低标签的拖尾到超视图约束的优先级。 (我select了990)。

我认为,布局系统(披露指标可见)无论如何不能满足所有的约束,所以它打破了一个。 但是,如果降低优先级,它仍然会尝试满足约束条件,但是不会因为冲突约束具有更高的优先级而破坏它。

希望这也解决了你的问题。

请注意斯蒂芬在评论部分提到的答案 。 upvoted的答案是有点正确的 ,但重要的是要明白为什么它只应该在某些情况下使用。

优先级通常用于元素A具有高度等于或小于/大于300,并且元素B具有高度等于或小于/大于500的约束的上下文中。然后,自动布局可以基于它们的优先级来满足这两个条件。

在这个特定的例子中,两个约束被设置为特定的值,降低优先级本质上告诉忽略这个约束,如果不可能满足(没有“部分忽略它”)。 然而 UILabel有一个例外 – 默认的UILabel行为是调整自己的大小,以适应内容,除非它受到额外的边界(autodesize约束隐藏在fittingSizeHTarget名称下),这种行为有时会显示错误的警告。 实际上,这个约束在运行时会被忽略,但是在内部被禁用之前,它会发出警告。 因此,即使我们通过降低其优先级(我们将优先级设置为900)来忽略其中的一个约束,但由于autosize约束在运行时将被忽略,所以我们的优先级将被应用和满足。