喜歡交朋友的加:微信號 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; }