0

私が持っているものは次のとおりです。

  • 1 から 400 文字の間の任意の長さを持つことができる NSString
  • UITableViewCell (カスタム レイアウト)

複数行の UILabel を使用して、テキストを設定し、sizeToFit を呼び出してみました。これは常に機能するとは限りません。ほとんどの場合、UILabel は、収まらない文字列の部分を切り取るだけです。また、テキストの長さが異なるため、さまざまなサイズの UITableViewCells が必要になり、「tableView: cellForRowAtIndexPath:」が呼び出された時点で、高さがどうなるかわかりません。

だから私が必要とするのは、テキストを表示し、その高さをサイズ変更して (幅は一定のままにする必要があります)、テキストに正確にフィットする非スクロール UI 要素です。前述のように、sizeToFit メソッドはほとんどゴミを生成します。

4

2 に答える 2

2

SizeWithFont: を使用して、セルの目的の高さを計算し、それを配列に格納して、HeightForRowAtIndexPath でその高さを返すことができます。テキストを更新する必要がある場合は、高さを再計算して配列に保存し、テーブルを更新するメソッドを用意するだけです。何かのようなもの:

 CGSize constraintSize;
 constraintSize.width = 290.0f;
 constraintSize.height = MAXFLOAT;
 NSString *text = @"YOUR TEXT"

 CGSize theSize = [text sizeWithFont:[UIFont systemFontOfSize:15.0f] constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

 NSLog(@"height: %f",theSize.height);

高さを出します。

于 2012-07-04T18:30:57.163 に答える
0

この構成では、電話アプリで長すぎる番号を入力したときに表示されるものと同様のものが得られるはずです -

label.minimumFontSize = 4; //a very small font size
label.adjustsFontSizeToFitWidth = YES;
label.lineBreakMode = UILineBreakModeWordWrap;// change to what works for you
label.numberOfLines = 0;

lineBreakMode ドキュメントを参照してください

于 2012-07-04T18:24:15.300 に答える