iOS UITableView 解決估算行高和指定行高的矛盾


喜歡交朋友的加:微信號 dwjluck2013

1、一般來說 在iOS 中若UITableViewCell 固定行高, 會通過

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
         return 81;
}

來設置;

2、如果需要由系統自動估算行高, 可以通過設置以下代碼實現:

// 動態行高
        self.tableView.rowHeight = UITableViewAutomaticDimension;
        // 預估行高
        self.tableView.estimatedRowHeight = 150;

3、如果一個tableview即想用固定行高又想用預估行高(自動計算行高) 這兩者的矛盾怎樣解決呢?以下代碼 關鍵在於 這句話:

return UITableViewAutomaticDimension;
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 0 || indexPath.section == 1) {
            return 81;
    }
    // 注意:解決固定行高和系統自動計算行高  其他組走系統自動計算行高
    return UITableViewAutomaticDimension;
}

 4.在cell中約束好之后 要寫  self.contentView 的高度實際contentview的高度就是cell的高度 重點注意在cell中  子控件約束不能用

contentView 約束 因為在設置self.contentView約束之前  self.contentView的高度都是0;

例如:

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        self.selectionStyle = UITableViewCellSelectionStyleNone;
        self.separatorInset = UIEdgeInsetsZero;
        
        [self.contentView addSubview:self.headerImageView];
        [self.contentView addSubview:self.titleLabel];
        [self.contentView addSubview:self.detailLabel];
        
        __weak typeof(self)weakself = self;
        [self.headerImageView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(weakself.mas_top).offset(10 / WIDTH_6S_SCALE);
            make.width.height.mas_offset(40 / WIDTH_6S_SCALE);
            make.left.equalTo(weakself.mas_left).offset(10 / WIDTH_6S_SCALE);
        }];
        [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(weakself.headerImageView.mas_top);
            make.left.equalTo(weakself.headerImageView.mas_right).offset(15 / WIDTH_6S_SCALE);
            make.height.mas_offset(20 / HEIGHT_6S_SCALE);
        }];
        [self.detailLabel mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(weakself.titleLabel.mas_left);
            make.right.equalTo(weakself).offset(-10 / WIDTH_5S_SCALE);
            make.top.equalTo(weakself.titleLabel.mas_bottom).offset(5 / WIDTH_6S_SCALE);
        }];
        
        [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(weakself.headerImageView.mas_top).offset(-10 / WIDTH_5S_SCALE);
            make.left.right.equalTo(weakself);
            make.bottom.equalTo(weakself.detailLabel.mas_bottom).offset(10 / WIDTH_5S_SCALE);
        }];
    }
    return self;
}

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM