我有一个带有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.
这是我在故事板中的原型单元格(如果你现在还没有弄清楚它是自定义的):
右下方的小标签是'Sayer',较大的标签是'Body'。
编辑 :作为旁注,我不想约束身体的高度,因为它是一个标签,其高度根据其中的文本数量而变化。
编辑2 :使用@siburb提供的解决方案警告消失了。但是一个新的问题仍然存在,如上面的屏幕显示,身体是一个很大的UILabel,我已经将lines
属性设置为0
,因为它应该允许标签根据它改变其大小文本输入量。当我运行程序时(在下面的屏幕截图中)我只能看到说话者UILabel。身体标签上有文字(我测试过),所以这不是问题。
在我的RecentTableViewController.h
(此表视图的文件)中,我已经包含了方法:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewAutomaticDimension;
}
应该动态调整UILabel的大小,我在之前的确切设置中工作但是我的约束搞砸了,而不是它不起作用。
编辑3 :以下是在 编辑 <中将建议的修改添加到我的代码后的工作版本图片/ strong> @siburb响应部分。
答案 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;