根据行高在UITableViewCell中移动UIImage



我有一个虚线的图像,它应该几乎位于我的每个UITableViewCell s的底部。在笔尖文件中,我有一条位于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.00000
版面调整后:0.00000000
布局调整前:0.00000000
布局调整后:16700000
布图调整前:000000
之后版面调整:167000000
版面调整前:0.00000000
布局调整后:0.00000000
布局调整前:0.0000000
版面调整后:16.400000

你可以看到,在某些情况下,我不需要重新定位图像,但在其他情况下我需要。我可以确定图像向下移动所需的垂直距离。然而,在任何情况下,绘制时都不需要重新放置图像。它只是停留在它开始的地方,这搞砸了我的手机显示屏。

有人看到我做错了什么吗?谢谢

如果您没有使用自动布局,在UITabelViewCell的笔尖类中的UIImageVIew上,从尺寸检查选项卡中的自动调整框中提供底部位置约束。现在,图像无论如何都将保持在底部。

若您使用的是自动布局,那个么提供适当的约束,使图像保持在底部,而不受单元格高度变化的影响。

UITableViewCell子类的prepareForReuse方法中,是否调用setNeedsLayout

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

- (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];
}

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

最新更新