基于行高在UITableViewCell中移动UIImage

时间:2014-09-08 03:44:53

标签: ios uitableview

我有一张虚线的图像,应该几乎位于我UITableViewCell的每个底部。在nib文件中,我将此行放在40像素的y位置,其中单元格高度为44像素。如果文本需要更多的垂直空间,我需要向下移动该行以与其他行高相对应。

我能够轻松地计算行高,但我似乎无法重新定位图像。我在UITableViewCell的子类中有以下代码:

- (void) layoutSubviews {
    [super layoutSubviews];

    NSLog(@"before layout adjustment: %f", _imageDashedLine.frame.origin.y);

    CGRect lineFrame = _imageDashedLine.frame;
    lineFrame.origin.y += self.frame.size.height - 44.0f;
    [_imageDashedLine setFrame:lineFrame];

    NSLog(@"after layout adjustment: %f", _imageDashedLine.frame.origin.y);
}

以下是一些输出:

  

布局调整前:0.000000
布局调整后:   0.000000
布局调整前:0.000000
布局调整后:16.000000
布局调整前:0.000000
后   布局调整:16.000000
在布局调整前:   0.000000
布局调整后:0.000000
在布局调整前:0.000000
在布局调整后:16.000000

你可以看到,在某些情况下,我不需要重新定位图像,但在其他情况下我会这样做。我能够确定向下移动图像所需的垂直距离。但是,在任何情况下,图像在绘制时都不会重新定位。它只是停留在它开始的地方,这搞砸了我的单元格显示。

谁能看到我做错了什么?谢谢!

4 个答案:

答案 0 :(得分:1)

如果您未使用自动布局,请在UIImageVIew的nib类UITabelViewCell中,提供底部位置约束来自尺寸检查标签中的自动调整大小框。现在,无论如何,图像都会保持在底部。

如果您使用自动布局,则为图像提供适当的约束以保持在底部,而不依赖于更改单元格高度。

答案 1 :(得分:0)

在你prepareForReuse子类的UITableViewCell方法中,你打电话给setNeedsLayout吗?

答案 2 :(得分:0)

这似乎有效。我很想知道是否有人有更好的主意。

- (void) layoutSubviews {
    [super layoutSubviews];

    CGRect frame = _imageDashedLine.frame;

    [_imageDashedLine removeFromSuperview];

    frame.origin.y = self.frame.size.height - 4.0f;
    [_imageDashedLine setFrame:frame];

    [self addSubview:_imageDashedLine];
}

答案 3 :(得分:0)

您是否尝试过使用某些CGRect几何方法。看看CGRectOffset或CGRectInset。 您应该能够使用其中一个跟踪表格单元格框架并将图像保持在相对于单元格底部的相同位置。