在iOS 8(以及它的SDK)之前,我使用此委托方法执行了UITableViewCell的自动高度:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (!_prototypeCell)
{
_prototypeCell = [tableView dequeueReusableCellWithIdentifier:@"MyShowIdentifier"];
}
EventShow *show = self.myShows[indexPath.row];
self.prototypeCell.categoryNameLabel.text = show.event.category.name;
self.prototypeCell.eventNameLabel.text = show.event.title;
[self.prototypeCell layoutIfNeeded];
CGSize size = [self.prototypeCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return size.height + 1.0f;
}
我的手机有两个标签,一个在另一个上面,带有自动布局限制,告诉标签垂直增长,与需要的一样多。一切都很好。
在iOS 8出现之后,我得到一个“无法同时满足约束”错误只有第一次方法systemLayoutSizeFittingSize:已执行。委托方法被调用3次。这是错误的细节:
(
"<NSLayoutConstraint:0x7fd1e8ebce30 H:|-(5)-[UILabel:0x7fd1eb0e00a0'Cine'] (Names: '|':UITableViewCellContentView:0x7fd1eb0c0210 )>",
"<NSLayoutConstraint:0x7fd1eb06b120 H:[UILabel:0x7fd1eb0e00a0'Cine']-(5)-| (Names: '|':UITableViewCellContentView:0x7fd1eb0c0210 )>",
"<NSLayoutConstraint:0x7fd1e8e7be50 'UIView-Encapsulated-Layout-Height' H:[UITableViewCellContentView:0x7fd1eb0c0210(0)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7fd1eb06b120 H:[UILabel:0x7fd1eb0e00a0'Cine']-(5)-| (Names: '|':UITableViewCellContentView:0x7fd1eb0c0210 )>
有一个名为“UIView-Encapsulated-Layout-Height”的新约束设置为零。我现在不知道那是什么,但我确信它应该是&gt; 0
自动高度在iOS 8中仍然有效,但它会抛出我无法解决的错误。
有什么想法吗?非常感谢!
答案 0 :(得分:0)
您获得的错误是标签宽度,因为您设置了特定宽度,并且还设置了前导和尾随约束。所以这里发生的是标签是破坏前导,尾随或宽度约束以满足标签的尾随约束。
但是为了满足你的尾随约束,它将打破宽度约束。
您需要做的只是为标签设置前导,顶部,尾部和底部约束。您还需要在这些标签之间设置垂直间距,而无需为两个标签设置高度和宽度约束。
同样在属性检查器中,您设置lines = 0,Line Breaks = Word Wrap。
您还需要在viewDidLoad中设置“self.tableView.rowHeight = UITableViewAutomaticDimension;”。