3

そのテキストに従ってテーブルビューセルの高さを計算したいと思います。使っています

CGSize userInputSize = [userLabel sizeWithFont:[UIFont fontWithName:@"Arial" size:18.0f] forWidth:[tableView frame].size.width-10 lineBreakMode:NSLineBreakByWordWrapping]  

しかし、どういうわけか、戻り値は常に22(フォントのサイズ)です。不思議なことに、私が使っているとき

CGSize userInputSize = [userLabel sizeWithFont:[UIFont fontWithName:@"Arial" size:18.0f] constrainedToSize:[tableView frame].size lineBreakMode:NSLineBreakByWordWrapping];

すべて正常に動作します。しかし、私は最初のバージョンを好むので、幅を簡単に調整できます。なぜ機能しないのですか?

編集:悪い名前の規則で申し訳ありませんが、userLabelはラベルではなくNSStringです

4

2 に答える 2

3

sizeWithFontメソッドですNSString(UIKitの追加)。使用する:

CGSize userInputSize = [userLabel.text sizeWithFont:[UIFont fontWithName:@"Arial" size:18.0f] constrainedToSize:[tableView frame].size lineBreakMode:NSLineBreakByWordWrapping];

また

CGSize userInputSize = [userLabel.text sizeWithFont:userLabel.font constrainedToSize:[tableView frame].size lineBreakMode:NSLineBreakByWordWrapping];

NSString UIKit 追加リファレンスを参照してください。

編集:

私はちょうどこのコードを試しました:

NSLog (@"test: %@", NSStringFromCGSize([@"test" sizeWithFont:[UIFont fontWithName:@"Arial" size:18.0f]]));
NSLog (@"longer test: %@", NSStringFromCGSize([@"longer test" sizeWithFont:[UIFont fontWithName:@"Arial" size:18.0f]]));

結果は次のとおりです。

test: {30, 22}
longer test: {85, 22}

CGSizestruct:

struct CGSize {
   CGFloat width;
   CGFloat height;
};
typedef struct CGSize CGSize;

したがって、おそらくsize.height代わりに見ているsize.width

EDIT2:

ドキュメントからsizeWithFont:forWidth:lineBreakMode:

文字列のサイズが指定された幅を超える場合、このメソッドは、指定された改行モードを使用して、最大幅に収まるまでテキストを切り捨てます (レイアウト目的のみ)。次に、結果の切り捨てられた文字列のサイズを返します。

widthしたがって、最大サイズ ( realおよび big height)を定義して、次のようにする方がよいでしょう。

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode

この回答をご覧ください。

于 2012-11-09T09:00:28.140 に答える
0

こっちの方がやりやすいと思います。userLabel の「text」プロパティを設定した後、このメソッドを呼び出します。

[userLabel sizeToFit];

この時点で、userLabel.frame は、選択したフォントのテキストに合うように変更されています。userLabel.frame.size.height を使用して、テーブル ビュー セルを調整できます。

于 2012-11-09T08:58:30.087 に答える