アドレスセルには可変の高さが必要です。可変高さのUITableViewCellを描画するときに不正な幅を取得する
viewWillAppear
私は、ラベルの高さを瓶の中に捉えるためのテストセルを描きます。
デリゲートメソッドtableView:heightForRowAtIndexPath
では、ivarを使用して実際のアドレスセルの高さを設定します。
コード:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
UITableViewCell *testCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:@"addressCell"] autorelease];
testCell.textLabel.text = @"Address";
testCell.detailTextLabel.text = [selectedPatient valueForKey:@"address"];
testCell.selectionStyle = UITableViewCellSelectionStyleNone;
testCell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;
testCell.frame = CGRectMake(0,0,100,30);
[testCell addSubview:testCell.detailTextLabel];
[testCell sizeToFit];
CGSize maxSize;
// HERE is where the problem occurs
// maxSize.width is 35 when it should be 200
maxSize.width = testCell.detailTextLabel.frame.size.width;
//
maxSize.height = 500;
UIFont *font = testCell.detailTextLabel.font;
CGSize testSize = [[selectedPatient valueForKey:@"address"] sizeWithFont:font constrainedToSize:maxSize lineBreakMode:UILineBreakModeWordWrap];
addressLabelHeight = testSize.height;
[testCell removeFromSuperview];
}
テストセルの幅を取得するには問題があります。 NSLogの値がcellForRowAtIndexPath:
の場合、幅は200になりますが、私のtestCellの幅は35にすぎません。これは、高さが大きすぎて余分な空白を持つセルを表示します。
maxSize.width = 200
を設定するだけで問題は解決しましたが、detailLabelの幅を動的に取得するのは間違っていましたか?
私はtableView:willDisplayCell:atIndexPathについて知らなかった。ありがとう!また、CGRectMakeでセルのフレームを作成せずに、寸法は0になります.Cocoaで描画するための優れたリソースをお勧めできますか? –
初期の寸法に関しては、それはデフォルトフレームであるので、はい、CGRectZeroになります。発信者は何かを提供する必要があります。通常は、それがどれくらい広がっているかを知る唯一のものである 'UITableView'によって行われます。このようなレイアウトの問題については、「View Programming Guide」が必要です。実際の "描画"には、Cocoa Drawing Guideが必要です。 [iOS 5プログラミング:限界を押し込む](http://www.wiley.com/WileyCDA/WileyTitle/productCd-1119961327.html)は今年後半にリリースされる予定で、図面を最適化するために多くのページを費やしています。 –