0

マイナークエスト - テーブルのサイズを合理的に一般的な方法で動的に設定するクリーンな方法を探しています (以下のスニペットは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。

4

1 に答える 1

0

とにかく、フォントサイズを多かれ少なかれ「ハードコード」する必要があると思います。インターフェイス ビルダーから取得する場合、または中央の定数ファイルから取得する場合 (さらにはコードから取得する場合) は、常になんらかの形でハードコードされています。

デバイスの種類 (iPhone、iPad) などを区別する必要がある場合でも、UI 要件に従って異なる値を使用できます。

私は通常、このような値の中央構成ファイルをセットアップします。そこで、標準の余白の値や、他のセル ラベルのフォント サイズを「ハードコード」することもできます。定数の数を減らすためにできるだけ多くの値を動的に計算するのが一般的ですが、これらの値を「固定」するために定数を使用することは依然として一般的です。

于 2012-05-18T09:26:14.397 に答える