カスタム 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);
}