2010-09-30 65 views
4

我是堆栈溢出和可可触摸开发的新手。细胞的detailTextLabel的宽度与UITableViewCellStyleValue2风格

我想用多行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。

感谢您的帮助!

+1

我以200px的字体大小工作。这对我来说工作得很好。 – testing 2010-10-27 10:57:54

回答

0

创建一个自定义单元格

+1

谢谢你的回答,但实际上我只是不想:-)。我无法想象它不可能计算出该标签的宽度,因为它显然具有固定的宽度。 – nubbel 2010-09-30 18:12:45

0

你可以在UITableViewCell中的自定义实现当且仅当没有设置,设置这些各种各样的参数layoutSubviews定义一组静态变量。请务必先致电[super layoutSubviews]

这样你就可以继承设备的默认设置,而且你永远都不会怀疑。
AFAIK,单元格宽度为self.contentView.frame.size.width。你可以使用self.textLabel.frame.size.widthself.detailTextLabel.frame.size.widthself.accessoryView.frame.size.width +之间的填充来找出细节。我不是100%的填充。但是,您可以通过检测标签宽度和contentView框架宽度之间的差异来计算填充。

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

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