Iphone 自定义UITableViewCell,其样式非常类似于UITableViewCellStyleValue2

Iphone 自定义UITableViewCell,其样式非常类似于UITableViewCellStyleValue2,iphone,ios,ipad,uitableview,xamarin.ios,Iphone,Ios,Ipad,Uitableview,Xamarin.ios,我想创建一个UITableViewCell,左边有两个蓝色文本的“TextLabels”,右边有两个黑色的“DetailTextLabels”,样式尽可能类似于UITableViewCellStyleValue2 到目前为止,我已经将TextLabel和DetailTextLabel文本设置为非常长的文本(这样它将占据分配给蓝色标签的整个宽度),将字体设置为UIColor.Clear,然后每次渲染时都进行测量。这是可怕的,原因很多,但它的工作方式 我想通过自定义UIView和自定义绘图方法来完成

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

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

我想通过自定义UIView和自定义绘图方法来完成这一点。这是一个更漂亮的解决方案,但现在我缺少了一个重要的信息:用于显示文本标签的区域的宽度。我可以硬编码,这似乎是在iOS上做事情的公认方式(即使这会让我感觉脏),但我必须在水平和垂直方向上为iPad和iPhone硬编码。然后,当我的UITableView是普通视图而不是分组视图或类似的视图时,它可能会崩溃

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


谢谢

每个
UITableViewCell
都有一个
textlab
和一个
detailtextlab
。在
UITableViewCellStyleValue2
上,
textLabel
位于左侧,
detailTextLabel
位于右侧。因此,您可以访问左侧标签的区域,如下所示:

cell.textLabel.frame
您可以访问正确标签的区域,如下所示:

cell.detailTextLabel.frame

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


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

只需子类化a
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];
}

你试过cell.frame.size.width吗?@AlanZeino这会给我单元格的宽度,而不是分配给蓝色标签的区域的宽度。我想你可能是在倒退-你想要的是单元格左右边缘的标准插图,硬编码这些,并将标签设置为自动大小(灵活宽度)这将涵盖纵向、横向、iPad等。我不确定为什么您要使用自定义视图并手动绘制,而不是将标签添加为子视图?@2ndMessage:是的,但您可以定义比例,其中单元格区域将用于蓝色和黑色标签(例如,单元格宽度的2/3表示蓝色;1/3表示绿色标签)。在任何情况下,宽度的计算取决于您。该单元格必须与其他所有普通UITableViewCell(左文本标签字体、宽度等)匹配看起来像是苹果自己做的。同意,我可以将其设置为单元格宽度的1/3,或是从右边圆角的左侧开始设置10个像素,或者其他什么,但是文本不会与标准UITableViewCellStyleValue2样式单元格中显示的普通、粗体蓝色样式的标签完全对齐。我需要将其定义为和苹果神一样宽。如果我不这样做,它会看起来很便宜而且不合适。肯定有一些常量或矩形属性我可以戳出来?没错,但它们的宽度不同,取决于它们的内容。我希望会有一个常量,或者一个你可以查询的属性,而不必到处设置伪cont在提供的文本标签中添加ent、隐藏它们等等。我已经将此方法归结为pat,但我假设有一种更干净的方法来查询简单控件的简单属性。