我需要自定義單元格中UITableViewStyleGrouped table.It必須如下UITableViewCellStyleValue1如果爲textLabel和detailTextLabel都沒有截斷顯示,或作爲UITableViewCellStyleSubtitle(但detailTextLabel寬度= contentView.frame.size.width和UITextAlignmentRight)如果值1樣式之一的標籤被截斷。如何獲取UITableViewCell的contentView寬度?
我需要知道方法- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
中cell.contentView的寬度來決定單元格的高度。我比較cell.contentView.width和標籤寬度的總和(我使用方法sizeThatFits:
得到它們)來決定它。
那麼,如何在單元格創建之前獲取正確的cell.contentView.frame.size.width?
UPD:一些代碼來澄清問題。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
CGFloat cellHeight = 44;
CGSize textSize = [[arrayOfTextData objectAtIndex:indexPath.row]
sizeWithFont:[UIFont systemFontOfSize:14]
constrainedToSize:CGSizeMake(1000, 100)
lineBreakMode:UILineBreakModeCharacterWrap];
CGSize detailedTextSize = [[arrayOfDetailTextData objectAtIndex:indexPath.row]
sizeWithFont:[UIFont systemFontOfSize:14]
constrainedToSize:CGSizeMake(1000, 100)
lineBreakMode:UILineBreakModeCharacterWrap];
if (textSize.width + detailedTextSize.width > /* I need here cell.contentView.frame.size.width*/ 300) {
cellHeight = textSize.height + detailedTextSize.height;
}
return cellHeight;
}
UPD2:的問題是,當我創建單元格cell.contentView.frame.size.width等於cell.frame.size.width和等於320,但細胞後出現cell.contentView.frame .size.width根據tableView的寬度和tableView風格而改變。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"tmpCell";
CustomTableViewCellValue1OrSubtitle *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[CustomTableViewCellValue1OrSubtitle alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
}
//--Configure the cell
cell.textLabel.text = [arrayOfTextData objectAtIndex:indexPath];
cell.detailTextLabel.text = [arrayOfDetailTextData objectAtIndex:indexPath.row];
[cell layoutIfNeeded];
CGSize textSize = [cell.textLabel.text sizeWithFont:cell.textLabel.font constrainedToSize:CGSizeMake(cell.contentView.bounds.size.width, 99999) lineBreakMode:cell.textLabel.lineBreakMode];
CGSize detailedTextSize = [cell.detailTextLabel.text sizeWithFont:cell.textLabel.font constrainedToSize:CGSizeMake(cell.contentView.bounds.size.width, 99999) lineBreakMode:cell.textLabel.lineBreakMode];
CGFloat cellHeight = cell.contentView.frame.size.height;
NSLog(@"contentView.frame.size.width = %f",cell.contentView.frame.size.width);
//out: contentView.frame.size.width = 320.0
//Always print 320, even if I set Simulator on iPad
if (textSize.width + detailedTextSize.width > cell.contentView.frame.size.width) {
cellHeight = textSize.height + detailedTextSize.height;
}
return cellHeight;
}
您是否曾經爲此找到過解決方案?我有一個類似的問題,在初始化期間,iPhone上的contentView.frame.size.width將返回320。 – cod3monk3y 2013-01-09 17:47:29
我最終實現了'layoutSubviews'來調整我的自定義單元格內容。 – cod3monk3y 2013-01-09 18:01:09
我做了同樣的事情。 – Alexander 2013-01-10 05:08:31