-
Notifications
You must be signed in to change notification settings - Fork 8
Open
Description
计算文本的内容内容尺寸一般用boundingRectWithSize方法。这种方式有一定的偏差,需要我们实际调整,但是不影响我们正常使用。
- (CGSize)idl_safeSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode {
CGSize inSize = CGSizeZero;
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
CGRect frame = [self boundingRectWithSize:size
options:NSStringDrawingUsesFontLeading | NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName : font}
context:nil];
inSize = CGSizeMake(ceilf(frame.size.width), ceilf(frame.size.height));
}
if (!isnormal(inSize.width)) {
inSize.width = 0.0;
}
return inSize;
}一般UILabel内容长度用上面的方式就可以大致做到动态调整,但是在 UITableViewCell 中我们往往会引入缓存,这样就不至于每次都得计算内容的高度,我们看上面的方法实际上是不依赖任何界面因素的,只是依赖NSString的内容,lineBreakMode以及容器宽度显示,这样完全可以放在UITableViewCell对应的model中。然后在heightForRowAtIndexPath中首先从缓存中获取,如果没有再从model中调用对应的方法去计算。
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
//放回高度
}Metadata
Metadata
Assignees
Labels
No labels