UILabel
内的 UITableViewCell
。在单元格点按上,高度会扩展,并会显示第二个UILabel
,其中包含不同数量的数据。
问题是,如果换行,sizeWithFont:constrainedToSize:lineBreakMode:
不会返回正确的高度并切断底线。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
labelExpanded = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
labelExpanded.font = [UIFont boldSystemFontOfSize:11];
labelExpanded.textAlignment = UITextAlignmentLeft;
labelExpanded.lineBreakMode = UILineBreakModeWordWrap;
labelExpanded.numberOfLines = 0;
[cell.contentView addSubview:labelExpanded];
CGSize constraint = CGSizeMake(300, 20000);
CGSize size = [expandedDetails sizeWithFont:[UIFont boldSystemFontOfSize:11] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
[labelExpanded setText:expandedDetails];
[labelExpanded setFrame:CGRectMake(16, 30, 248, size.height)];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(// Row is Expanded)
{
CGSize constraint = CGSizeMake(300, 20000);
CGSize size = [sameTextAsLabel sizeWithFont:[UIFont boldSystemFontOfSize:11] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
// I found +8 to height added nice padding
CGFloat height = size.height + 8;
}
else // Row is not expanded
return 30;
}
同一文本被送到两者,它由一个包含多个新行\n
的字符串组成。如果该行长于宽度,则自动换行完成其工作,但在计算其动态高度时,它无法包含换行。
如果我向[labelExpanded setFrame:height]
添加任何值,例如[size.height + 30]
我的包装线就会出现。但是,如果未包装该行,则会添加不必要的空格。
我无法在网上找到解决方案。
答案 0 :(得分:7)
我注意到的一件事是您正在根据宽度300计算尺寸,但是将尺寸调整为248。
答案 1 :(得分:3)
CGSize constraint = CGSizeMake(300, 20000);
CGSize size = [expandedDetails sizeWithFont:[UIFont boldSystemFontOfSize:11] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
[labelExpanded setText:expandedDetails];
[labelExpanded setFrame:CGRectMake(16, 30, 248, size.height)];
为什么标签框架宽度为248,约束宽度为300?