具有2个标签的单元格始终“无法同时满足约束”

时间:2015-11-30 00:06:56

标签: ios objective-c autolayout uistoryboard

我有一个带有2个简单标签的单元格,我在过去的6个小时内一直在工作(让它在此之前工作并决定修补它并丢失我的工作版本)。我总是得到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. 
(
    "<NSLayoutConstraint:0x7f8fe8737520 V:[UILabel:0x7f8fe873d5a0'Label'(26)]>",
    "<NSLayoutConstraint:0x7f8fe8738ea0 UILabel:0x7f8fe873d7a0'Label'.top == UITableViewCellContentView:0x7f8fe873cf00.topMargin>",
    "<NSLayoutConstraint:0x7f8fe8739000 UILabel:0x7f8fe873d5a0'Label'.bottom == UITableViewCellContentView:0x7f8fe873cf00.bottomMargin>",
    "<NSLayoutConstraint:0x7f8fe8739110 V:[UILabel:0x7f8fe873d7a0'Label']-(NSSpace(8))-[UILabel:0x7f8fe873d5a0'Label']>",
    "<NSLayoutConstraint:0x7f8fe8743ac0 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7f8fe873cf00(43.6667)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7f8fe8737520 V:[UILabel:0x7f8fe873d5a0'Label'(26)]>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

这是我在故事板中的原型单元格(如果你现在还没有弄清楚它是自定义的): enter image description here

右下方的小标签是'Sayer',较大的标签是'Body'。

编辑 :作为旁注,我不想约束身体的高度,因为它是一个标签,其高度根据其中的文本数量而变化。

编辑2 :使用@siburb提供的解决方案警告消失了。但是一个新的问题仍然存在,如上面的屏幕显示,身体是一个很大的UILabel,我已经将lines属性设置为0,因为它应该允许标签根据它改变其大小文本输入量。当我运行程序时(在下面的屏幕截图中)我只能看到说话者UILabel。身体标签上有文字(我测试过),所以这不是问题。

enter image description here

在我的RecentTableViewController.h(此表视图的文件)中,我已经包含了方法:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewAutomaticDimension;
}

应该动态调整UILabel的大小,我在之前的确切设置中工作但是我的约束搞砸了,而不是它不起作用。

编辑3 :以下是在 编辑 <中将建议的修改添加到我的代码后的工作版本图片/ strong> @siburb响应部分。

enter image description here

1 个答案:

答案 0 :(得分:1)

你需要降低&#34;优先级&#34;其中一个约束。

尝试降低&#34; body&#34;的底部约束的优先级。到900 - 这意味着&#34; sayer&#34;的高度限制不会被打破。

此外,它可能有助于降低&#34;垂直内容拥抱优先级&#34; &#34;身体&#34; UILabel为1 - 这意味着&#34;身体&#34; UILabel不会如此热衷于坚持其内在规模的高度&#34; (大小由标签内容决定)。

编辑:要解决第二个问题,您可能需要增加&#34; 垂直内容压缩阻抗优先级&#34; &#34;身体&#34;的UILabel。例如,将其增加到999。

您也不需要heightForRowAtIndexPath:方法。只需在viewDidLoad:方法中包含以下内容:

self.tableView.estimatedRowHeight = 100; self.tableView.rowHeight = UITableViewAutomaticDimension;