修改使用viewWithTag选择的单元格元素框架不起作用

时间:2013-07-15 14:15:46

标签: ios uitableview uilabel frame

我在故事板中有自定义单元格的tableview

小区标识符为:MyCustomCellIdentifier

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

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

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

在功能中:

- (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个值而不是故事板中的实际值? 如何初始化标签的框架以获得正确的值?

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

当我向下滚动并向后滚动回到上一个单元格时,它实际显示的是正确的框架,但在第一次显示时却没有。

1 个答案:

答案 0 :(得分:2)

这是自动布局开启的结果(默认情况下启用)。要修复它,您可以关闭自动布局,或使用约束而不是设置框架来更改标签的大小。我不清楚为什么你要这样设置标签的宽度 - 如果你只是将它设置为"尺寸适合内容"在IB中,它会自动调整大小以适应文本(无论如何都在宽度方向上)。