自定义UITableViewCell,其样式与UITableViewCellStyleValue2非常相似

时间:2011-11-24 11:05:35

标签: iphone ios ipad uitableview xamarin.ios

我想在左边用蓝色文本创建一个带有两个“TextLabels”的UITableViewCell,在右边创建两个黑色的“DetailTextLabels”,与UITableViewCellStyleValue2的样式尽可能类似。

到目前为止,我已将TextLabel和DetailTextLabel文本设置为非常长(因此它将占用分配给蓝色标签的全部宽度),将字体设置为UIColor.Clear,并且然后在每次渲染时进行测量。由于很多原因,这很糟糕,但它有一定的作用。

我想通过自定义UIView和自定义Draw方法来实现这一目标。这是一个更漂亮的解决方案,但现在我缺少一个重要的信息:用于显示TextLabel的区域的宽度。我可以硬编码,这似乎是在iOS上做事的可接受的方式(即使它让我感觉很脏),但是我必须在水平和垂直方向上为iPad和iPhone硬编码。然后,只要我的UITableView是普通的而不是分组的,或者某些东西,它就可能会中断。

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

谢谢!

3 个答案:

答案 0 :(得分:1)

每个UITableViewCell都有一个textLabel和一个detailTextLabel。在UITableViewCellStyleValue2textLabel位于左侧,detailTextLabel位于右侧。因此,您可以像这样访问左侧标签的区域:

cell.textLabel.frame

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

cell.detailTextLabel.frame

答案 1 :(得分:1)

您是否考虑过在Interface Builder中创建单元格并使用静态UINib加载它?这对我来说似乎足够快,但我还没有测试过比3GS慢的任何东西。

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

答案 2 :(得分: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];
}