UITableView動(dòng)態(tài)計(jì)算Cell高度

#pragma mark - 動(dòng)態(tài)計(jì)算cell高度

+ (CGFloat)kCalculation_HeightForCellWithTableView:(UITableView *)tableView byIdentifier:(NSString *)identifier configuration:(void (^)(id cell))configuration {

NSAssert(identifier.length > 0, @"Expect a valid identifier - %@", identifier);? ? NSMutableDictionary*templateCellsByIdentifiers = objc_getAssociatedObject(tableView, _cmd);

if (!templateCellsByIdentifiers) {

templateCellsByIdentifiers = @{}.mutableCopy;

objc_setAssociatedObject(tableView, _cmd, templateCellsByIdentifiers, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

UITableViewCell *cell = templateCellsByIdentifiers[identifier];

if (!cell) {

cell = [tableView dequeueReusableCellWithIdentifier:identifier];

NSAssert(cell != nil, @"Cell must be registered to table view for identifier - %@", identifier);

cell.contentView.translatesAutoresizingMaskIntoConstraints = NO;

templateCellsByIdentifiers[identifier] = cell;

}

[cell prepareForReuse];

if (configuration) {

configuration(cell);

}

CGFloat contentViewWidth = CGRectGetWidth(tableView.frame);

if (cell.accessoryView) {

contentViewWidth -= 16 + CGRectGetWidth(cell.accessoryView.frame);

} else {

static const CGFloat systemAccessoryWidths[] = {

[UITableViewCellAccessoryNone] = 0,

[UITableViewCellAccessoryDisclosureIndicator] = 34,

[UITableViewCellAccessoryDetailDisclosureButton] = 68,

[UITableViewCellAccessoryCheckmark] = 40,

[UITableViewCellAccessoryDetailButton] = 48

};

contentViewWidth -= systemAccessoryWidths[cell.accessoryType];

}

CGFloat fittingHeight = 0;

if (contentViewWidth > 0) {

NSLayoutConstraint *widthFenceConstraint = [NSLayoutConstraint constraintWithItem:cell.contentView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:contentViewWidth];

[cell.contentView addConstraint:widthFenceConstraint];

fittingHeight = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

[cell.contentView removeConstraint:widthFenceConstraint];

}

if (fittingHeight == 0) {

fittingHeight = 44;

}

return fittingHeight;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容