我有一个虚线的图像,它应该几乎位于我的每个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。您应该能够使用其中一个来跟踪表格单元格框架,并将图像保持在相对于单元格底部的相同位置。