2011-11-24 47 views
1

我想创建一个UITableViewCell,在左边有两个蓝色文本“TextLabels”,右边是两个黑色的“DetailTextLabels”,风格类似于尽可能使用UITableViewCellStyleValue2。自定义UITableViewCell的样式看起来非常像UITableViewCellStyleValue2

到目前为止,我已经将TextLabel和DetailTextLabel文本设置为非常长的东西(以便它将占用分配给蓝色标签的整个宽度),将字体设置为UIColor.Clear,然后每次渲染时都会进行测量。这有很多原因是可怕的,但它的工作方式。

我想用一个自定义的UIView和一个自定义的Draw方法来实现这一点。这是一个更漂亮的解决方案,但现在我缺少一个重要的信息:用于显示TextLabel的区域的宽度。我可以对它进行硬编码,这似乎是在iOS上执行操作的可接受方式(即使它让我感觉脏),但是我必须在水平和垂直方向上对iPad和iPhone进行硬编码。然后,只要我的UITableView是简单的而不是分组,或者其他的,它可能会中断。

我在哪里可以得到这个愚蠢的标签区域的标准宽度?

谢谢!

+0

您是否尝试过cell.frame.size.width? –

+0

@AlanZeino会给我的单元格的宽度,而不是分配给蓝色标签的区域的宽度。 –

+0

我认为你可能会接近这个反向 - 你想要的是从单元格左右边缘的标准插入,硬编码这些并将你的标签设置为自动大小(灵活宽度),这将覆盖你的肖像,风景, iPad等等。我不确定为什么要使用自定义视图并手动绘制而不是将标签添加为子视图? – jrturton

回答

1

每个UITableViewCell有一个textLabel和一个detailTextLabel。在UITableViewCellStyleValue2上,textLabel位于左侧,而detailTextLabel位于右侧。因此,你可以访问左侧的标签的面积是这样的:

cell.textLabel.frame 

,您可以访问正确的标签的地区,像这样:

cell.detailTextLabel.frame 
+0

这是正确的,但它们根据其内容具有不同的宽度。我希望能有一个不变的或者可以查询的属性,而不必在提供的文本标签中设置伪造的内容,隐藏它们等等。我已经有了这种方法来拍打,但是我认为有一种简单的控制简单属性查询的更简单的方法。 –

1

你有没有想过做在Interface Builder中的细胞,并用静态UINib来加载它?这对我来说似乎足够快,但我还没有测试任何比3GS慢的东西。

如果它对于你的应用来说足够快,我强烈推荐它,你将能够在未来以更少的努力进行小(和大!)的调整。

0

只是子类UIView,并在您的drawRect内执行以下操作。

- (void) drawRect:(CGRect)rect { 
    NSString *label = @"Label 1"; 
    CGSize size = [label sizeWithFont:[UIFont boldSystemFontOfSize:12.0f] 
        constrainedToSize:CGSizeMake(self.frame.size.width, 100.0f) 
        lineBreakMode:UILineBreakModeCharacterWrap]; 

    [label drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height) withFont:[UIFont boldSystemFontOfSize:12.0f]]; 

    [super drawRect:rect]; 
}