6

UILabelsizeToFitメソッドに問題があります:

UILabel *questionLabel = [[UILabel alloc]initWithFrame:CGRectMake(0,0,320,320)];
questionLabel.lineBreakMode = UILineBreakModeWordWrap;
questionLabel.backgroundColor=[UIColor clearColor];
questionLabel.textAlignment=UITextAlignmentLeft;
questionLabel.textColor=[UIColor blackColor];
questionLabel.tag=1;
questionLabel.font=[UIFont systemFontOfSize:13];
questionLabel.numberOfLines = 0;
[questionLabel sizeToFit];
[myView addSubview:questionLabel];

データを表示するためにこのコードを書きました。しかし、次のように書くと[questionLabel sizeToFit]、データが正しく表示されません。削除[questionLabel sizeToFit]すると表示されますが、半分のデータしか表示されません。

ありがとうございます。

4

6 に答える 6

16
NSString *yourString = @"write your label text here";
CGSize s = [yourString sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(width, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];
questionLabel.frame = CGRectMake(0, 0, s.width, s.height);

それが役立つかどうかを確認してください。

于 2012-06-08T06:51:20.097 に答える
2

ラベルのサイズを計算するには、 taus-iDeveloper の回答を使用するのが最善だと思います。
コードが機能しない理由は、テキストを UILabel に設定していないため、sizeToFit が CGSizeZero を返す (画面に表示されない) ためだと言いたいだけです。sizeToFit を使用する前にテキストを設定する必要があります。

于 2012-09-17T20:11:19.937 に答える
0

上記の問題をグーグルで調べたところ、sizeToFit がバグのようで、すでにアップルに報告されているという情報に出くわしました。したがって、回避策として、次のコードを使用できます。

NSString * myText = [NSString stringWithString:@"some text"];

CGFloat constrainedSize = 265.0f;

UIFont * myFont = [UIFont fontWithName:@"Arial" size:19]; 

CGSize textSize = [myText sizeWithFont: myFont
                       constrainedToSize:CGSizeMake(constrainedSize, CGFLOAT_MAX)
                           lineBreakMode:UILineBreakModeWordWrap];



CGRect labelFrame = CGRectMake (0, 0, textSize.width, textSize.height);

UILabel *label = [[UILabel alloc] initWithFrame:labelFrame];

[label setFont:myFont];

[label setText:myText];
于 2012-06-08T07:25:31.703 に答える
0

UILabel で sizeToFit を使用する場合、InterfaceBuilder で Autoshrink プロパティを「固定フォント サイズ」から「最小フォント サイズ」に変更する必要があることがわかりました。私は通常、その値を 0.5 に設定して、正しく機能することを確認します。

于 2015-02-13T20:54:33.013 に答える
-1

ラベルの行数を増やしてください。それ以外の

questionLable.numberOfLines = 0;利用する

questionLable.numberOfLines = 4; これは、システムが 4 行で可能な最小幅を計算するように強制するためです。

これは、Xib ファイルでも実現できます。

于 2012-06-08T06:38:19.323 に答える