1

我在情节提要中有一个带有自定义单元格的表格视图

小区标识符是:MyCustomCellIdentifier

标签的框架是:{ { 15.0f, 178.0f }, { 280.0f, 40.0f } }

我基本上想根据文本的大小更改 UILabel 的框架。

假设我的 UILabel 被标记为:1在我的 StoryBoard 中

在函数中:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCustomCellIdentifier"];
    UILabel *myLabel = [(UILabel *)[cell viewWithTag:1];

    NSLog(@"frame %@", NSStringFromCGRect(myLabel.frame)); //frame {{0, 295}, {0, 0}}
    myLabel.text = @"myText";

    CGSize maximumLabelSize = CGSizeMake(FLT_MAX, myLabel.frame.size.height);
    CGSize expectedLabelSize = [myLabel.text sizeWithFont:myLabel.font constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByTruncatingTail];
    CGRect newFrame = myLabel.frame;
    newFrame.size.width = expectedLabelSize.width;
    myLabel.frame = newFrame;
    NSLog(@"frame %@", NSStringFromCGRect(myLabel.frame)); //frame {{0, 295}, {80, 0}}

    return cell;
}

为什么有那些 0 值而不是情节提要中的实际值?如何初始化标签的框架以获得正确的值?

为什么如果我以编程方式设置值不会更改显示的标签框?

当我向下滚动并滚动回上一个单元格时,它实际上显示了正确的帧,但在第一次显示期间却没有。

4

1 回答 1

2

这是自动布局开启的结果(默认开启)。要修复它,您可以关闭自动布局,或者使用约束而不是设置框架来更改标签的大小。我不清楚您为什么要尝试以这种方式设置标签的宽度-如果您只是在 IB 中将其设置为“适合内容的大小”,它将自动调整大小以适合文本(无论如何在宽度方向)。

于 2013-07-15T14:44:21.717 回答