如何正确添加自定义TableViewCell?

时间:2013-01-11 18:03:45

标签: ios cocoa-touch uitableview

我的iPad-app中有一个分组的tableView,我一直试图设置cell.imageView.center = cell.center使图像居中而不是将其放在最左边的位置。如果没有UITableviewCell的子类,这显然是不可能的(如果有人可以解释原因,那也值得赞赏。现在我只是假设它们是'私有'变量,因为Java开发人员会称之为'私有'变量) 。 所以,我创建了一个自定义的tableViewCell,但我只想在这个tableView的一行中使用这个单元格。所以在cellForRowAtIndexPath我基本上写了

cell = [[UITableViewCell alloc]initWith//blahblah

if(indexPath.row == 0)
    cell = [[CustomCell alloc]initWith//blahblah

这当然不完全是我写的,但这就是它的想法。

现在,当我这样做时,它可以工作,但是这个 GROUPED tableView中的第一个单元格比其他单元格更宽,而我没有在自定义单元格中做任何事情。 customCell类尚未更改。它仍然有圆角,所以它似乎知道它是一个分组的tableView。

此外,我一直在努力以编程方式获取单元格的大小,在cellForRowAtIndexPath中,我尝试退出cell.frame.size.widthcell.contentView.frame.size.width,两者都返回320,当我知道它们更宽的时候..就像,所有行都是大约400宽,第一个单元格是420或者其他东西。它仍然为所有单元格写出320 ..

1 个答案:

答案 0 :(得分:0)

由于以下几个原因,此代码无效:

cell.imageView.center = cell.center;

首先,该中心与其超级视图相关。我相信单元格superview是tableView。 imageView的superview将是单元格的内容视图。因此坐标系是不同的,因此厘米将被偏移。例如。第三个单元格将具有0.5宽度+3.5高度的中心。您应该能够通过以下方式解决此问题:

cell.imageView.center = CGPointMake( width / 2 , height / 2 );

第二个问题与表视图的工作方式有关。表视图管理其单元格视图。单元格的宽度由表格视图的宽度定义,高度由表格视图的行高属性定义。这意味着细胞本身无法控制其大小。

然而,您可以调整其子视图的大小,但必须在设置单元格大小后执行此操作(否则您可能会得到奇怪的结果)。您可以在布局子视图(自定义UITableViewCell类)中执行此操作。 See this answer

- (void)layoutSubviews {
    [super layoutSubviews];
    self.imageView.frame = ....
}

调用layoutSubviews时,已设置了细胞框架,因此您的视图记录在此处而不是cellForRowAtIndexpath

至于GROUPED风格。我不确定这是否适用于自定义视图。我怀疑它将其单元格的大小设置为自己的宽度减去每个大小的20像素边距,然后将一个蒙版应用于截面中的顶部和底部单元格以获得圆角效果。如果您使用自定义视图尝试坚持使用标准表视图样式。