0

我的 iPad 应用程序中有一个分组的 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.width并且cell.contentView.frame.size.width当我知道它们更宽时,它们都返回 320 .. 就像,所有行都大约 400宽,第一个单元格是 420 或其他东西。它仍然为所有单元格写出 320 ..

4

1 回答 1

0

由于以下几个原因,此代码将不起作用:

cell.imageView.center = cell.center;

首先,中心是相对于它的superview的。我相信单元格的超级视图是 tableView。imageView 的超级视图将是单元格的内容视图。因此坐标系是不同的,所以centens 将被偏移。例如,向下的第 3 个单元格的中心为 0.5 宽度 + 3.5 高度。您应该能够通过执行以下操作来解决此问题:

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

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

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

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

何时layoutSubviews调用单元格框架已设置,因此您的视图日志记录在这里而不是cellForRowAtIndexpath.

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

于 2013-01-11T18:49:43.540 回答