UITableView - 获取单元格的宽度以适合文本?

时间:2012-11-29 19:24:06

标签: iphone objective-c ios ipad uitableview

我正在编写一个自定义的UITableViewCell对象,并且我已经实现layoutSubviews来在更新其内容时调整单元格的大小。

要实现heightForRowAtIndexPath,我正在计算自定义UITableViewCell对象中单元格的高度。我正在使用NSString sizeWithFont根据UILabel中的文本和UITableView中单元格的宽度来计算单元格的大小。

但是如何在UITableView中获取单元格的宽度?

现在,我正在将表视图传递给对象并使用框架。但宽度是整个表格而不是单个单元格。这里有什么我想念的吗?

提前致谢。

EDIT3

我在想,如果它真的不可能,只需测试纵向或横向,然后手动设置宽度(ipad只有2种不同的方向)..

EDIT2

有一些问题'你为什么这样做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);

}

1 个答案:

答案 0 :(得分:0)

要获得单元格的宽度,请执行此操作...

cell.contentview.frame.size.width