iOS 8中具有自动高度的UITableView

iOS 8中具有自动高度的UITableView,uitableview,ios8,autolayout,height,Uitableview,Ios8,Autolayout,Height,在iOS 8(及其SDK)之前,我使用以下委托方法自动调整UITableViewCell的高度: -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ if (!_prototypeCell) { _prototypeCell = [tableView dequeueReusableCellWithIdentifier:@"My

在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封装布局高度”,设置为零。我现在不知道那是什么,但我确信它应该大于0

自动高度在iOS 8中仍然有效,但它抛出了我无法修复的错误


有什么想法吗?非常感谢

您得到的错误是标签的宽度,因为您已经设置了特定的宽度,并且还设置了前导和尾随约束。所以这里要做的是,标签要打破前导、尾随或宽度约束,以满足标签的尾随约束

但为了满足尾随约束,它将打破宽度约束

这里需要做的只是将前导、顶部、尾部和底部约束设置为标签。此外,还需要设置这些标签之间的垂直间距,而无需为这两个标签设置高度和宽度约束

此外,在属性检查器中,还可以将行设置为0,换行设置为换行


您还需要在viewDidLoad中设置“self.tableView.rowHeight=UITableViewAutomaticDimension;”。

哇,很抱歉,我复制了错误(已编辑)。它不是UIView封装布局宽度,而是UIView封装布局高度。答案仍然适用吗?再次感谢和抱歉。