如何使用 Masonry 自动布局 UItableviewCell 高度

Posted

技术标签:

【中文标题】如何使用 Masonry 自动布局 UItableviewCell 高度【英文标题】:How use Masonry autolayout UItableviewCell height 【发布时间】:2015-08-19 07:14:58 【问题描述】:

我正在尝试使用自动布局自动调整表格单元格的大小。但似乎 TableView 忽略了高度限制。

UITableViewCell 中的 UIImage 和 UILabel:

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) 
        self.icon = [[UIImageView alloc] init];
        [self.contentView addSubview:self.icon];
        [self.icon mas_makeConstraints:^(MASConstraintMaker *make) 

        make.top.equalTo(self.contentView).with.offset(10);
        make.left.equalTo(self.contentView).with.offset(10);
        make.width.offset(70);
        make.height.offset(70);
//            make.bottom.equalTo(self.contentView.mas_bottom).with.offset(-10);
        ];
        self.icon.backgroundColor = [UIColor redColor];

        self.customText = [[UILabel alloc] init];
        self.customText.text = @"xx11dragon";
        self.customText.backgroundColor = [UIColor yellowColor];
        self.customText.numberOfLines = 0;
        self.customText.lineBreakMode = NSLineBreakByCharWrapping;
        [self.contentView addSubview:self.customText];

        [self.customText mas_makeConstraints:^(MASConstraintMaker *make) 

            make.top.equalTo(self.contentView).with.offset(10);
            make.left.equalTo(self.icon.mas_right).with.offset(10);
            make.right.equalTo(self.contentView.mas_right).with.offset(-10);
//            make.bottom.equalTo(self.contentView.mas_bottom).with.offset(-10);

        ];

在 UITableViewClass 中:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath   
    _cell.title.text = [dict objectForKey:@"title"];
    _cell.customText.text = [dict objectForKey:@"content"];
    [_cell setNeedsLayout];
    [_cell layoutIfNeeded];
    CGSize size = [_cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
    NSLog(@"%f",size.height);


    return size.height + 1;

size.height 等于 0.0f

UITableViewCell 高度等于 UIimage 或 UIlabel 底部+10px,底部如何设置?

【问题讨论】:

【参考方案1】:

ios 8 中,您可以使用这种方法。

self.tableView.estimatedRowHeight = 100.0;
self.tableView.rowHeight = UITableViewAutomaticDimension;

【讨论】:

以上是关于如何使用 Masonry 自动布局 UItableviewCell 高度的主要内容,如果未能解决你的问题,请参考以下文章

读 SnapKit 和 Masonry 自动布局框架源码(轉)

Masonry自动布局与UIScrolView适配

使用 Masonry 向视图的子视图添加自动布局约束

iOS自动布局——Masonry详解

Masonry scrollview循环布局

iOS学习笔记36-Masonry自动布局