从Storyboard加载UILabel,无法更改cellForRowAtIndexPath中的帧

时间:2013-03-31 10:44:38

标签: ios uitableview uilabel

我为iOS6开发了一款应用。我在故事板中初始化了动态单元格,其中包含一些UILabels和一些UIImageViews。他们的高度可能会在飞行中发生变化。我的问题是当我在cellForRowAtIndexPath更改框架时这样:

contentText = (UILabel *)[cell viewWithTag:TAG_TOPIC_CONTENT_TEXT];

CGFloat height = [[self.contentHeights objectAtIndex:[indexPath row]] floatValue];

contentText.frame = CGRectMake(CELL_TOPIC_CONTENT_X, CELL_TOPIC_CONTENT_Y, CELL_CONTENT_WIDTH, height);

屏幕上显示的contentText UILabel的高度仍与我在Storyboard中初始化的高度相同。似乎修改不起作用。如果我刷新UITableView contentText的高度将变为正确,如何解决问题?提前谢谢!

3 个答案:

答案 0 :(得分:0)

尝试在tableView:willDisplayCell:forRowAtIndexPath:方法中执行此操作。这是通常用于UI自定义的方法。希望这有帮助!

答案 1 :(得分:0)

如果你需要修改任何单元格的框架,那么你应该创建一个UITableViewCell的子类并实现layoutSubviews方法:

- (void)layoutSubviews {
  [super layoutSubviews];

  // modify frames here
}

答案 2 :(得分:0)

我知道这令人沮丧,但我也没有找到解决方案。 相反,我发现自己是一个完成工作的解决方法,因为我希望它们可以工作。

删除了“AutoLayout”(故事板中的复选框)

然后:

[self.label setText:@"Labeltext"];
[self.label setBackgroundColor:[UIColor orangeColor]];// just to make the frame visible
[self.label setNumberOfLines:0];
[self.label sizeToFit];

像魅力一样,但也有:

self.label.frame = CGRectMake(0, 0, 50, 50);

所以,如果你不需要AutoLayout(对我而言,这是我取消选中的第一件事)摆脱它。