我想在左边用蓝色文本创建一个带有两个“TextLabels”的UITableViewCell,在右边创建两个黑色的“DetailTextLabels”,与UITableViewCellStyleValue2的样式尽可能类似。
到目前为止,我已将TextLabel和DetailTextLabel文本设置为非常长(因此它将占用分配给蓝色标签的全部宽度),将字体设置为UIColor.Clear,并且然后在每次渲染时进行测量。由于很多原因,这很糟糕,但它有一定的作用。
我想通过自定义UIView和自定义Draw方法来实现这一目标。这是一个更漂亮的解决方案,但现在我缺少一个重要的信息:用于显示TextLabel的区域的宽度。我可以硬编码,这似乎是在iOS上做事的可接受的方式(即使它让我感觉很脏),但是我必须在水平和垂直方向上为iPad和iPhone硬编码。然后,只要我的UITableView是普通的而不是分组的,或者某些东西,它就可能会中断。
我在哪里可以获得这个愚蠢标签区域的标准当前宽度?
谢谢!
答案 0 :(得分:1)
每个UITableViewCell
都有一个textLabel
和一个detailTextLabel
。在UITableViewCellStyleValue2
,textLabel
位于左侧,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];
}