表格单元格TextLabel框架宽度自动增加

时间:2013-05-17 10:47:29

标签: ios objective-c uitableview

我希望有一个带有标签的表格,然后在标签后面添加一个文本字段UI。 我希望Label有一些固定的大小(比方说150),其余的单元格宽度都被文本字段占用。

因此我在函数

中设置了cell.textLabel的框架
  

的cellForRowAtIndexPath

以这种方式

[cell.textLabel setFrame:CGRectMake(cell.textLabel.frame.origin.x, cell.textLabel.frame.origin.y, 150, cell.textLabel.frame.size.height)];

但这似乎不起作用。

任何想法为什么以及什么可以解决这个问题?

2 个答案:

答案 0 :(得分:3)

为什么不在单元格上添加自定义标签...

UILabel *mylabel = [[UILabel alloc] initWithFrame:CGRectMake(5,5, 150, 40)];
[cell.contentView addSubview:mylabel];

否则你需要覆盖 - LayoutSubViews方法并且必须继承UITableViewCell ..

答案 1 :(得分:1)

UITableViewCell负责布置其子视图。您可以使用UITableViewCellStyle枚举对其布局进行非常高级别的控制。

如果您想要自定义内容,请覆盖UITableViewCell并将视图添加到其内容视图或修改现有视图。执行此操作时,请务必使用layoutSubviews方法进行布局,例如

- (void)layoutSubviews 
{
    [super layoutSubviews];
    self.textLabel.frame = CGRectMake(self.textLabel.frame.origin.x, 
                                      self.textLabel.frame.origin.y, 
                                      150, 
                                      self.textLabel.frame.size.height);
}

单元格的框架在添加到UITableView时会发生变化。当单元格的框架更改时,将调用layoutSubviews,以便您有机会调整其子视图。默认情况下,UITableViewCell会做一些自己的调整,这可能会导致你的问题。