Xcode在cellForRowAtIndexPath方法中更改Prototype单元格内的UILabel大小

时间:2013-11-27 08:31:28

标签: xcode uitableview uilabel

在UITableView中,我想在每个原型单元格中绘制一个条形图,每个单元格中的大小不同,以指示值的数量

对于条形图,我使用了一个UILabel(尝试过UIview,结果相同),我想在cellForRowAtIndexPath方法中进行更改:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

int value = //Math to calculate value per cell
LessionViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"lessionItems"];
CGRect frmBlueLabel = cell.labelBlueBackground.frame;
frmBlueLabel.size.width = value;
cell.labelValue.text = [NSString stringWithFormat:@"%i", value]
cell.labelBlueBackground.frame = frmBlueLabel;
return cell;
}

当然,cell.labelBlueBackground.frame正确地连接在IB中。当我调试时,我可以看到cell.labelBlueBackground.frame在返回单元格时具有正确的值。

然而,在我的应用程序中,所有单元格的大小相等。

我在该单元格中设置了另一个标签labelValue,我设置了text属性 - 效果很好。

是否无法在cellForRowAtIndexPath中进行调整大小?我该如何解决这个问题?

非常感谢!

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。看起来在cellForRowAtIndexPath方法中无法更改帧。

经过一些研究,我能够通过以下代码解决这个问题:

-(void)viewWillLayoutSubviews{
    [super viewWillLayoutSubviews];
    [self updateAllBars];

}

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [self updateAllBars];


}

虽然updateAllBars是我编写的一个函数,它遍历所有单元格并更改框架。 有趣的是,这必须在viewWillAppear和viewWillLayoutSubviews中执行