具有UITableViewCellStyleValue2样式的单元格上的detailTextLabel的宽度

时间:2010-09-30 17:55:12

标签: cocoa-touch uitableview multiline

我是堆叠溢出和可可触摸开发的新手。

我正在尝试使用带有多行detailTextLabel的UITableViewCellSytleValue2来构建UITableViewCell。

因此我实现了tableView:heightForRowAtIndexPath:就像那样:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

 if (indexPath.row != 4) {
  return tableView.rowHeight;
 }

 NSString *text = toDoItem.note;
 UIFont *font = [UIFont systemFontOfSize:[UIFont systemFontSize]];
 CGSize withinSize = CGSizeMake(167, 1000);
 CGSize size = [text sizeWithFont:font constrainedToSize:withinSize lineBreakMode:UILineBreakModeCharacterWrap];

 CGFloat height = size.height + 26;

    return height;    
}

我发现detailTextLabel的宽度大约是167px,但想要完全知道它并且不喜欢硬编码(考虑方向改变)。

我试图访问detailTextLabel的框架或边界,但它的宽度返回0.0。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

创建自定义单元格

答案 1 :(得分:0)

您可以在UITableViewCell的自定义实现中定义一组静态变量,只有在未设置的情况下,才会在layoutSubviews中设置这些类型的参数。请务必先拨打[super layoutSubviews]

这样你就可以继承设备的默认设置了,你永远不必怀疑 AFAIK,单元格宽度为self.contentView.frame.size.width。您可以在每个之间使用self.textLabel.frame.size.widthself.detailTextLabel.frame.size.width以及self.accessoryView.frame.size.width +填充来确定详细信息。我不是100%的填充。但是,您可以通过检测标签宽度和contentView框架宽度之间的差异来计算填充。

对不起。我忘了细胞的detailTextLabel尺寸总是在不断变化;绝对不能依赖于时期。您可以根据拥有的UIViewController和单元格textLabel的宽度派生标签宽度。由于计算是在控制器级别,您将知道tableView是否已分组。如果是这样,您可以简单地将宽度缩小0.8倍左右,并减去textLabel宽度。

同样适用于字体:self.textLabel.font.pointSizeself.detailTextLabel.font.pointSize