『导言』
iOS开发中,对于一个列表中的UITableViewCell行的字符串高度不一致,那么怎样才能全部显示字符串?(高度自适应demo下载)
-
方法:
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary<NSString *, id> *)attributes context:(nullable NSStringDrawingContext *)context NS_AVAILABLE(10_11, 7_0);
- 需要传入
字符串
str,宽度
w, 最大高度
MAXFLOAT ,字体
font大小,得到rect
-
代码:
#pragma mark- UITableViewDatasourece
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.tableSource.count;
}
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString* identifier = @"customCell";
static BOOL isRegister = NO;
if (!isRegister) {
UINib* cellNib = [UINib nibWithNibName:@"GCZCell" bundle:nil];
[tableView registerNib:cellNib forCellReuseIdentifier:identifier];
isRegister = YES;
}
GCZCell* cell = [tableView dequeueReusableCellWithIdentifier:identifier];
// 表格内容的设置
GCZModel* model = self.tableSource[indexPath.row];
cell.iconView.image = [UIImage imageNamed:@"36_8.jpg"];
cell.titleLabel.text = model.likeCount;
// 先计算出要加载的字符串按照177宽,字体大小为17排版需要的rect
// w == 177 ; h = 998\MAXFLOAT(无限大)
CGRect rect = [model.comment boundingRectWithSize:CGSizeMake(177, 998) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:17]} context:nil];
CGRect labelFrame = cell.contenLabel.frame;
//w == 177 h=?
NSInteger h = rect.size.height+10;
NSLog(@"\nh = %d\n-----------------------",h );
// 根据要显示内容排版的高度,重新设置label的高度
CGRect newFrame = CGRectMake(labelFrame.origin.x, labelFrame.origin.y, 177, rect.size.height+10);
[cell.contenLabel setFrame:newFrame];
[cell.contenLabel setLineBreakMode:NSLineBreakByCharWrapping];
cell.contenLabel.numberOfLines = 0;
// 设置label的内容
cell.contenLabel.text = model.comment;
return cell;
}