无法在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
,您可以看到第一个和第二个单元格中的标签现在已经很好地显示了。 (这里我只滚动了两个单元格并将它们拉回来。)
在您的post中,我没有找到用于设置标签框架的labelBible的定义。
使用约束它很快:
和
通过这种方式,您无需在-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
执行任何操作-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法。
编辑:使用约束:必须检查Use Autolayout
。
希望能按你的意愿工作。
只需从标签框的文件检查器中取消选中自动布局。