简体   繁体   English

设置UITableViewCell高度和基于文本高度的单元格文本标签

[英]Setting UITableViewCell height and the cell's text label based on the text height

I have followed the instructions I have been able to find on stackoverflow to fix the following but none have worked. 我已经按照我在stackoverflow上可以找到的说明进行了修复,但是没有任何效果。 Below is my code: 下面是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *CellIdentifier = @"DoCCell";
DoCCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[DoCCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...

CGSize constraintSize = CGSizeMake(cell.infoLabel.frame.size.width, MAXFLOAT);
CGSize labelSize = [_content[[indexPath row] * 2] sizeWithFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:12.0f]
                                             constrainedToSize:constraintSize
                                                 lineBreakMode:NSLineBreakByWordWrapping];
CGRect frame = CGRectMake (cell.infoLabel.frame.origin.x, cell.infoLabel.frame.origin.y, labelSize.width, labelSize.height);
[cell.infoLabel setFrame:frame];

cell.infoLabel.lineBreakMode = NSLineBreakByWordWrapping;
cell.infoLabel.numberOfLines = 10;

_font = cell.infoLabel.font;
cell.infoLabel.text = _content[[indexPath row] * 2];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);

CGSize size = [_content[[indexPath row] * 2] sizeWithFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:12.0f]
               constrainedToSize:constraintSize
                   lineBreakMode:NSLineBreakByWordWrapping];
return size.height + 30.0;
}

but when I run my code the height of the cells is changed appropriately while the label size is not. 但是,当我运行代码时,单元格的高度会适当更改,而标签大小不会更改。

The cell is a custom cell and I have added the label via the .xib file. 该单元格是一个自定义单元格,我已经通过.xib文件添加了标签。 I tried manually stretching the label which worked in the sense that it would display all of the text so the issue is not in the wrapping of the label. 我尝试手动拉伸标签,该标签在某种意义上可以显示所有文本,因此问题不在标签的包装中。 I have also tested the cell.infoLabel.frame.size.height and the height value DOES change with the height of the cell as far as the value is concerned but it is not displayed as such. 我还测试了cell.infoLabel.frame.size.height,并且高度值确实会随单元格的高度而变化,但该值不会显示出来。 What am I doing wrong? 我究竟做错了什么?

I think that the problem might be of adjusting the vertical alignment of the text in the UILabel instance. 我认为问题可能在于调整UILabel实例中文本的垂直对齐方式。

I think you should do the following inside cellForRowAtIndexPath: 我认为您应该在cellForRowAtIndexPath内部执行以下操作:

cell.infoLabel.text = _content[[indexPath row] * 2];
cell.infoLabel.numberOfLines = 0;
[cell.infoLabel sizeToFit];

More details about it can be found in the following link: Vertical Alignment of UILabel Text 有关它的更多详细信息,请参见以下链接: UILabel文本的垂直对齐

Hope this helps! 希望这可以帮助! :) :)

Use below code in cellForRowAtIndexPath delegate of tableView : 在tableView的cellForRowAtIndexPath委托中使用以下代码:

    // getDynamicHeight function calculates height based on text length
    //Dynamically determine height for cell text
    CGFloat calculatedHeight = [self getDynamicHeight:@"Some very long text here"];  

    //Set name label frame based on text height
    cell.infoLabel.frame = CGRectMake(cell.infoLabel.frame.origin.x,cell.infoLabel.frame.origin.y, cell.infoLabel.frame.size.width,calculatedHeight);
    cell.infoLabel.numberOfLines = 5;

    cell.infoLabel.text = @"Some very long text here";

// getDynamicHeight function
//Dynamically determine height for cell based in containing Text 
-(CGFloat) getDynamicHeight : (NSString *) strCellTextName {

UILabel *lblGetDynamicHeight = [[UILabel alloc] init];
lblGetDynamicHeight.lineBreakMode = UILineBreakModeWordWrap;

lblGetDynamicHeight.text = strCellTextName;

CGSize labelStringSize = [lblGetDynamicHeight.text sizeWithFont:lblGetDynamicHeight.font constrainedToSize:CGSizeMake(142, 9999) lineBreakMode:lblGetDynamicHeight.lineBreakMode];

return  labelStringSize.height; }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM