无法在tableView:cellForRowAtIndexPath:方法中设置标签框架

tableViewCell标签的框架不能在ableView:cellForRowAtIndexPath:方法中设置。 实际上,如NSLog ,标签的框架已更改,但未在视图中显示。 我预计标签(带绿色背景)应该比图片中的标签更高,这可以显示其中的所有文字Identifier “单元格”的Prototype Cell格在storyboard创建。 任何帮助将不胜感激。

ps:Xcode 5.0.2,iOS7

 - (void)viewDidLoad { [super viewDidLoad]; NSString * str = @"Do any additional setup after loading the view, typically from a nib Do any additional setup after loading the view, typically from a nib Do any additional setup after loading the view, typically from a nib"; NSArray *array = [NSArray arrayWithObjects:str, str, str , str, str, str, nil]; } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ NSInteger row = indexPath.row; CGSize sizeConstraint = CGSizeMake(tableView.frame.size.width, 2000); CGSize size = [[array objectAtIndex:row] boundingRectWithSize:sizeConstraint options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont fontWithName:FontName size:FontSize]} context:nil].size; return size.height + 20; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ NSInteger row = indexPath.row; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; UILabel *label = (UILabel *)[cell.contentView viewWithTag:1]; label.autoresizingMask = UIViewAutoresizingNone; label.numberOfLines = 0; label.lineBreakMode = NSLineBreakByWordWrapping; label.font = [UIFont fontWithName:FontName size:FontSize]; label.backgroundColor = [UIColor greenColor]; label.text = [array objectAtIndex:row]; CGSize sizeConstraint = CGSizeMake(tableView.frame.size.width, 2000); CGSize size = [label.text boundingRectWithSize:sizeConstraint options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: label.font} context:nil].size; CGRect rect = label.frame; rect.size.height = size.height; [label setFrame:rect]; NSLog(@"label height :%f", label.frame.size.height); [label sizeThatFits:sizeConstraint]; return cell; } 

在此处输入图像描述在此处输入图像描述

当您滚动tableView ,您可以看到第一个和第二个单元格中的标签现在已经很好地显示了。 (这里我只滚动了两个单元格并将它们拉回来。)

滚动tableView后

在您的post中,我没有找到用于设置标签框架的labelBible的定义。

使用约束它很快:

在此处输入图像描述

在此处输入图像描述

通过这种方式,您无需在-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath执行任何操作-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法。

编辑:使用约束:必须检查Use Autolayout

在此处输入图像描述

希望能按你的意愿工作。

只需从标签框的文件检查器中取消选中自动布局。