我知道这将是一个愚蠢的愚蠢的简单问题,但我会围成一圈。
我想要在uitableview中显示几个字符串。其中一些字符串非常长。我之前已经问过如何计算细胞高度,并选择以下答案:
- (CGFloat)cellHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellString = <YOUR MODEL OBJECT>;
NSDictionary *attributes = @{ NSFontAttributeName : [UIFont systemFontOfSize:16.0f] };
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]
initWithString: cellString
attributes:attributes];
CGFloat width = self.tableView.frame.size.width - 32.0f;
CGRect frame = [attributedString boundingRectWithSize:CGSizeMake(width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin context:nil];
// Add some extra padding to the height
CGFloat height = frame.size.height + 16.0f;
return ceil(height);
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return [self cellHeightForRowAtIndexPath:indexPath];
}
如何获得uitableview中显示字符串所需的行数。
答案 0 :(得分:0)
实际计算单元格高度的最佳方法是使用原型单元格来计算高度。
在您的界面扩展程序中添加property
:
@interface TableViewController ()
@property (nonatomic, strong) TableViewCell *prototypeCell;
@end
然后懒洋洋地加载它:
- (TableViewCell *)prototypeCell
{
if (!_prototypeCell)
{
_prototypeCell = [[TableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Prototype"];
}
return _prototypeCell;
}
将-[tableView:cellForRowAtIndexPath:]
方法更改为使用-[configureCell:forRowAtIndexPath:]
类型模式:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellId" forIndexPath:indexPath];
[self configureCell:cell forRowAtIndexPath:indexPath];
return cell;
}
-(void)configureCell:(TableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
// Set up you cell from your model
}
现在使用此方法设置原型,然后使用-[tableView:heightForRowAtIndexPath:]
的高度:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
[self configureCell:self.prototypeCell forRowAtIndexPath:indexPath];
[self.prototypeCell layoutIfNeeded];
CGSize size = [self.prototypeCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return ceil(size.height);
}