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

Posted

技术标签:

【中文标题】无法在 tableView:cellForRowAtIndexPath: 方法中设置标签框【英文标题】:Failed to set label frame in tableView:cellForRowAtIndexPath: method 【发布时间】:2014-02-20 13:38:25 【问题描述】:

tableViewCell中标签的边框不能在ableView:cellForRowAtIndexPath:方法中设置。事实上,如NSLog 所示,标签的框架已更改,但未显示在视图中。 我希望标签(绿色背景)应该比图片中的要高,这样可以显示其中的所有文字Prototype CellIdentifier “单元格”是在 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 时,您可以看到第一个和第二个单元格中的标签现在显示良好。 (这里我只是滚动出两个单元格并将它们拉回来。)

【问题讨论】:

@iDev 然后就可以清楚的看到tableview的分隔线了 设置绑定而不是框架 设置框架后为什么要使用[label sizeThatFits:sizeConstraint]; @NicolasBonnet 我试过解决问题,但没有用。 @CoolMonster 好像不行。 【参考方案1】:

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

使用约束很快:

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

编辑:使用约束:Use Autolayout 必须被选中。

希望它能如你所愿。

【讨论】:

你试过了吗:[label setFrame:cell.frame] [label setFrame:cell.frame] 不起作用。为什么不能。并且“选定的视图没有约束。在构建时,将为视图生成显式的左侧、顶部、宽度和高度约束。”我无法设置标签的约束... 我通过取消选中情节提要中我的 UILable 的 Use Autolayout 属性解决了我的问题。 ***.com/questions/18911986/… 这个帖子我找到了添加标签约束的解决方案。 如果我取消选中使用自动布局,我的问题中的代码效果很好:) 感谢您的回答:)【参考方案2】:

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

【讨论】:

以上是关于无法在 tableView:cellForRowAtIndexPath: 方法中设置标签框的主要内容,如果未能解决你的问题,请参考以下文章

无法在 SQL Server 视图中使用工作查询:“IS”无法识别“>”无法识别

无法在春季导入 org.apache.poi,因此无法编译

无法理解为啥计算在没有手表的情况下无法工作

React 无法编译模块未找到:无法在listingDetail 上解析

为啥 Today Widget 在 iOS 14 上显示“无法加载”且无法调试?

“无法在此文件中预览 - 无法启动 [应用程序名称]”