我正在编写一个自定义 UITableViewCell 对象,并且我已经实现layoutSubviews
了在其内容更新时调整单元格的大小。
为了实现heightForRowAtIndexPath
,我正在计算自定义 UITableViewCell 对象中单元格的高度。我NSString sizeWithFont
用来根据 UILabel 中的文本和 UITableView 中单元格的宽度来计算单元格的大小。
但是如何获得 UITableView 中单元格的宽度?
现在,我将表格视图传递给对象并使用框架。但宽度是整个表格而不是单个单元格。我在这里缺少什么吗?
提前致谢。
编辑3
我在想,如果真的不可能,只需测试纵向或横向方向,然后手动设置宽度(ipad 只有 2 个不同的方向)..
编辑2
有一些关于“你为什么要这样做xxxx”的问题。我知道也许有更好的方法来实现我正在做的事情,创建一个自定义单元格,它可以计算自己的高度和不同的文本长度。如果有更好的方法,我会全神贯注:)
编辑
http://img845.imageshack.us/img845/7792/screenshot20121129at193.png
+ (CGFloat)getHeightForCellWithText:(NSString *)text isExpanded:(BOOL)expanded tableView:(UITableViewController *)tv {
ProposalViewCell *cell = [[ProposalViewCell alloc] initWithStyle:UITableViewCellSelectionStyleNone reuseIdentifier:@"NormalCell" tableView:tv];
[cell setLabelText:text];
[cell setExpanded:expanded];
[cell layoutSubviews];
return cell.primaryLabel.frame.size.height + cell.readmoreButton.frame.size.height + cell.sendmessageButton.frame.size.height +30;
}
- (void)layoutSubviews {
[super layoutSubviews];
_primaryLabel.numberOfLines = 0; // multiple lines
// size of expanded text label
// sizeWithFont: if text doesn't fit, it is truncated
CGSize expandedSize = [_primaryLabel.text sizeWithFont:myFont constrainedToSize:CGSizeMake(tableView.view.frame.size.width, CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping];
// size as expanded by default
_primaryLabel.frame = CGRectMake(10, 10, expandedSize.width, expandedSize.height);
if (expanded==NO) {
// size of summary text label
_primaryLabel.numberOfLines = 10;
CGSize summarySize = [_primaryLabel sizeThatFits:_primaryLabel.frame.size];
_primaryLabel.frame = CGRectMake(10, 10, summarySize.width, summarySize.height);
}
_readmoreButton.frame = CGRectMake(10, _primaryLabel.frame.size.height+10, 225, 25);
_sendmessageButton.frame = CGRectMake(10, _primaryLabel.frame.size.height+10+_readmoreButton.frame.size.height+10, 225, 25);
}