Autolayout systemLayoutSizeFittingSize奇怪的行为

时间:2014-04-30 23:25:25

标签: ios autolayout

我有一个摘要单元格,其高度使用systemLayoutSizeFittingSize计算。它大部分按预期工作。高度由三个多行标签(标题,作者,流派)和评级图片视图决定,外部元素标注为contentView

当标题标签溢出到下一行时,它会适当地调整大小。但是,当作者标签溢出时,它似乎没有适当地增加大小。

标签和图像视图上的所有抗压力最大值均为1000.如果右侧内容小于缩略图,则左侧缩略图底部的优先级约束较低。 (@ 750,底部== 8来自superview底部)。评级图片视图也有超级视图底部的约束(@ 1000,底部> =来自superview底部的8)。

autolayout issue

1 个答案:

答案 0 :(得分:0)

有趣。所以我最终通过在更新内容和计算高度之前重置参考单元框架高度来解决这个问题。不完全确定为什么需要这一步骤。我对contentView优先考虑的自动调整约束有一些猜测:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    switch (indexPath.section) {
        case TableSectionSummary: {
            TCAnswerDetailAppSummaryCell *cell = self.summaryCell;
            CGRect oldFrame = self.summaryCell.frame;
            cell.frame = CGRectMake(oldFrame.origin.x, oldFrame.origin.y, mTCTableViewFrameWidth, 400);
            [cell configureWithThirdPartyObject:self.app];
            [cell updateConstraintsIfNeeded];
            [cell layoutIfNeeded];
            CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height + 1;
            return height;
        }
        case TableSectionDetails:
            return [TCAnswerDetailBasicCell heightForCellWithTableWidth:mTCTableViewFrameWidth withLabelString:self.app.appDescription withDisclosureArrow:NO];
    }
    return 0;
}