たくさんのテキストを保持する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 |
---------------
セルテキストにはUILabel
を使用します。次に、sizeWithFont:constrainedToSize:
を使用して、各セル内のUILabelの高さを計算できます。例えば:
#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;
}
解決策は非常に単純で、iOS 7以降で機能するはずです。StoryBoardのUITextView
内のUITableViewCell
のScrolling Enabled
オプションがオフオフになっていることを確認してください。
次に、UITableViewControllerのviewDidLoad()で、次のようにtableView.rowHeight = UITableViewAutomaticDimension
とtableView.estimatedRowHeight > 0
を設定します。
override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 44.0
}
それでおしまい。 UITableViewCell
の高さは、内側のUITextView
の高さに基づいて自動的に調整されます。
テキストビューのcontentInsetのようなものが含まれるため、テキストサイズを計算するときに考慮する必要があるため、かなり複雑なものです。 内部UITextViewに基づくUITableViewCellの高さ を計算するための学習と解決策をブログに書きました。投稿には、テーブルビュースタイルと自動回転の両方のユニバーサルアプリで機能するコードが含まれています。