2011-02-03 22 views
28

多くのテキストを保持するUITableViewCellを作成する必要があります。 UITextViewを自分のセルに追加できますが、各エントリには同じ量のテキストはありません。動的な高さを持つUITableViewCell、UITextView

私はUITableViewCellの高さを制御することができると知っています:-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPathしかし、それは私が探しているものではありません。

シナリオ1:

--------------- 
| First Cell | 
--------------- 
--------------- 
| Second Cell | 
| with some  | 
| text.   | 
--------------- 
--------------- 
| Third Cell | 
--------------- 

シナリオ2:あなたのセルのテキストの

--------------- 
| First Cell | 
--------------- 
--------------- 
| Second Cell | 
| with some  | 
| more text and | 
| an unknown | 
| cell height. | 
--------------- 
--------------- 
| Third Cell | 
--------------- 
+0

あなたが探しているものが明確でない - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPathは標準的な方法です。 –

+4

はい、セルの高さがあらかじめわかっていないと意味がありません。 – WrightsCS

答えて

34

使用UILabelsizeWithFont:constrainedToSize:を使用して、各セル内のそのUILabelの高さを計算することができます。例えば:それはあなたがテキストのサイズを計算する際に考慮に入れる必要があります彼のテキストビューのcontentInsetのようなものを必要とするよう

#define PADDING 10.0f 

- (CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *text = [self.items objectAtIndex:indexPath.row]; 
    CGSize textSize = [text sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:CGSizeMake(self.tableView.frame.size.width - PADDING * 3, 1000.0f)]; 

    return textSize.height + PADDING * 3; 
} 
+2

UILabel自体については、 'sizeWithFont:constrainedToSize:'を使用して、必要なサイズを事前に計算し、 'drawInRect:withFont:'でレンダリングしてください。 –

+0

sizeWithFont:constrainedToSizeとはどんな種類のラッピングですか? – Bogatyr

+0

+1ありがとう、テーブルセルにダイナミックラベルがあり、これは完全に機能しました!また、cellForRowAtIndexPathのラベルのフレームをtextSize計算に設定する必要がありました。 – Bogatyr

2

それは、かなり複雑なものです。私はブログでUITableViewCell height based on an inner UITextViewを計算するための私の学習と解決策を書いた。このポストには、ユニバーサルアプリケーション、テーブルビュースタイル、オートローテーションの両方で動作するコードが含まれています。

2

ソリューションは非常に簡単であるとiOS 7. Scrolling Enabledオプションは、ストーリーボードにUITableViewCellUITextViewためオフになっていることを確認しますので、動作するはずです。それだけです

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.rowHeight = UITableViewAutomaticDimension 
    tableView.estimatedRowHeight = 44.0 
} 

は、その後、あなたのUITableViewControllerののviewDidLoadで()のようなtableView.rowHeight = UITableViewAutomaticDimensiontableView.estimatedRowHeight > 0を設定します。 UITableViewCellの高さは、内側のUITextViewの高さに基づいて自動的に調整されます。

関連する問題