自动调整UITableViewCell内容的大小

时间:2010-07-28 22:46:27

标签: iphone ipad uitableview autoresize

我有一些代码可以创建一个带滑块的表格单元格。它非常简单,在iPhone上尺寸很好。我在这里稍微匿名了一下:

UITableViewCell* cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Foo"] autorelease];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
CGRect contentViewFrame = cell.contentView.frame;
CGRect sliderFrame = CGRectMake(10, 0, 280, contentViewFrame.size.height);
UISlider* slider = [[UISlider alloc] initWithFrame:sliderFrame];
UIImage* minimumImage = [UIImage imageNamed:@"min.png"];
UIImage* maximumImage = [UIImage imageNamed:@"max.png"];
slider.minimumValueImage = minimumImage;
slider.maximumValueImage = maximumImage;
slider.value = 0.5f;
[slider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged];
[cell.contentView addSubview:slider];
[slider release];

当然,iPad尺寸不正确。所以我的第一个想法是将autoresizingMask属性设置为UIViewAutoresizingFlexibleWidth。问题解决了吧?不。现在在iPhone上,滑块加图像内容的宽度小于280,因此它不会直到最后 - 最终缩短约20像素。

在iPad上,同样的事情 - UISlider的宽度自动调整为距离单元格末尾约20个像素。

也许自动调整大小标志正在关注单元格中不存在的accessoryView?我尝试明确地将其设置为nil,但我认为默认情况下它是nil,因此没有任何变化。

我希望此单元格的内容自动调整为单元格的“完整”宽度,无论设备和方向如何。有没有简单的方法呢?

4 个答案:

答案 0 :(得分:10)

它完全按照你描述的方式工作。我倾向于认为这是iOS错误。在iPAD上创建新的UITableViewCell时,其宽度设置为320.硬编码(!)视图和contentView。如果设置为UIViewAutoresizingFlexibleWidth,则无法正确调整大小。我把它设置为view.frame.size.width / 2,结果很有趣:在iPhone上它是160,在iPad上它是608!

我最终手动调整了我的单元格及其内容的大小。

答案 1 :(得分:6)

有点迟了但我今天找到了同样问题的解决方案,但你需要创建一个自定义的UITableViewCell。 然后你可以覆盖函数

- (void) layoutSubviews
{
    [dateLabel setFrame:CGRectMake(10.f, 16.f, 80.f, 12.f)];
    [textLabel setFrame:CGRectMake(106.f, 16.f, contentView.frame.size.width-105.f + 1.f, 12.f)];
}

在该函数中,self.frame.size.width是实际的 它也适用于设备的旋转。

答案 2 :(得分:3)

你应该能够告诉调整大小系统将物体“粘住”在距离右边缘一定距离的位置(它没有足够大的尺寸)。如果您使用IB进行实验,则可以创建一个在宽度上调整大小并固定在右侧的视图。

您是否也设置了UIViewAutoresizingFlexibleRightMargin?

答案 3 :(得分:3)

将您的手机contentMode设置为UIViewContentModeRedraw

相关问题