マイナークエスト - テーブルのサイズを合理的に一般的な方法で動的に設定するクリーンな方法を探しています (以下のスニペットはhttp://pastebin.com/E2pUFRg4からのものです)。
今、私は次のようなことを考えました
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *text = [items objectAtIndex:[indexPath row]];
CGSize constraint = CGSizeMake(self.view.bounds.size.width-24.f, CGFLOAT_MAX);
UITableViewCell * cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
CGSize size = [text sizeWithFont:cell.textLabel.font
constrainedToSize:constraint
lineBreakMode:UILineBreakModeWordWrap];
CGFloat height = MAX(size.height + 12.f, tableView.rowHeight);
return height;
}
上手にカットします。残念ながら、tableView:heightForRowAtIndexPath への最初の呼び出しでは、テキスト ラベルのフォントのサイズが 0 に設定されます (フォント自体は別の方法で設定されます)。最初の描画の後、適切なものにのみ取り込まれます。
したがって、これを次のように変更する必要があります。
....
UIFont * font = cell.textLabel.font;
if (font.pointSize == 0)
font = [UIFont systemFontOfSize:20];
CGSize size = [text sizeWithFont:font
constrainedToSize:constraint
lineBreakMode:UILineBreakModeWordWrap];
.....
トリックを行います。しかし今、突然ハードコーディングされたフォント サイズの仮定が 20 になりました。
だから私の質問は今です
- これを防ぐ方法はありますか?つまり、これだけハードコーディングしますか?
また、X と Y の境界線/インセットを垂直 2x6 および水平 2x12 で推測します。
- これを動的に、または定数から学習する方法はありますか (iPhone および iPad-UIPopover ビューの適切なデフォルトに近づけるために) ?
そして最後に:
- これを行うためのよりクリーンな方法の提案 - これにより、detailLabel または同様の追加フィールドを考慮に入れることもできます。
完全なサンプルはhttp://pastebin.com/E2pUFRg4にあります。
ありがとう、
Dw。