使用UITableViewAutomaticDimension时UITableViewCell高度错误

时间:2015-02-07 14:21:18

标签: ios uitableview autolayout

我使用2个多线标签制作自定义单元格,并将此标签固定到所有边。在-tableView:heightForRowAtIndexPath: iOS> = 8 时,我返回UITableViewAutomaticDimension。但是当表视图出现时,单元格高度应该比应该大。向下滚动然后向上滚动单元格取正常高度。如何解决这个问题?

身高代码:

   - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) {
        return UITableViewAutomaticDimension;
    }

    static CCTopicTableViewCell *cell;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        cell = [tableView dequeueReusableCellWithIdentifier:@"topicCellIdentifier"];
    });
    cell.topic = [self.topics topicAtIndexPath:indexPath];

    cell.bounds = CGRectMake(0, 0, CGRectGetWidth(self.tableView.bounds), CGRectGetHeight(cell.bounds));

    [cell setNeedsLayout];
    [cell layoutIfNeeded];

    CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
    return size.height + 1;
}

结果:

滚动后

4 个答案:

答案 0 :(得分:9)

当我没有为iOS 8设置tableView的estimatedRowHeight并且每次设置多行标签的文本时更新preferredMaxLayoutWidth时,问题就消失了

答案 1 :(得分:2)

在viewDidLoad()方法或viewWillAppear()中设置自动尺寸(两个代码在同一位置)

    tableView.rowHeight = UITableViewAutomaticDimension;
    tableView.estimatedRowHeight = 160.0;//(Maximum Height that should be assigned to your cell)

访问Using Auto Layout in UITableView for dynamic cell layouts & variable row heights iOS 7和iOS 8的直观指南

答案 2 :(得分:2)

我通过设置" text"解决了这个问题。多行标签的属性为" nil":

_tableView.estimatedRowHeight = 44
_tableView.rowHeight = UITableViewAutomaticDimension

还有表格专长" estimatedRowHeight"和" rowHeight"应该正确设置:

var a = [[1,2,3],[4,5,6],[7,8,9]];

答案 3 :(得分:1)

如果该标签通过上边下边与不同标签对齐,则

Automatic dimension对某些UILabel效果不佳。只要确保你没有这样的对齐方式。