1

私はIBを介して作業しており、レイアウトのほぼ最後まで引き伸ばされたUILabelを持っています。Lines=2 に設定しました。最大行数は 2 であるためです。ただし、1 行の長さしかない場合は、垂直方向に上揃えにしたいと考えています。

IB のラベル設定:

 Lines:2
 Line breaks: Word wrap

コードでは、viewDidLoad メソッドで UILabel のテキストを設定します。ただし、機能の一部として、ある時点でテキストを変更する必要があります。これは私のコードです:

[_main_lbl1 setText:[myUI MAIN_TITLE]];  //Always only 1 line
[_main_lblsub1 setText:[myUI SUB_TITLE]]; //May be 1 or 2 lines
[_main_lblsub1 sizeToFit];  //Causes vertical alignment (I believe)

テキストを変更して sizeToFit を再実行するたびに、テキストの折り返しが完全にめちゃくちゃになります。IB で設定されているように UILabel のほぼ最後に到達する代わりに、場合によってはテキストが半分強の距離で折り返され、場合によってはまったく折り返されません。

IB のレイアウトのイメージ:

IB のラベル

シミュレーターでの結果のラベルの画像:

シミュレーターでの結果のラベルのイメージ

最初のラベルでは問題なく動作しているようですが、2 番目のラベルはまったく折り返されていません。

UILabel テキストを変更するときにテキストの折り返しを維持するために何かしなければならないことはありますか? 私が見逃しているものは他にありますか?

:詳細と写真を含めるために質問を更新しました。

ありがとう

4

2 に答える 2

2

問題は、sizeToFit を使用していることです。テキストに合わせてラベルを引き伸ばします。サイズを変更する必要がある場合は、次を使用できます。

CGSize maxSize = CGSizeMake(320, 9999);  // 999 means it can be as tall as you like

CGSize textSize = [label.text sizeWithFont:label.font
                         constrainedToSize:maxSize];
label.size = textSize;
于 2013-06-25T01:19:37.517 に答える
0

特別なことをしなくていいです。テキストを変更すると、テキストが収まるように自動的に折り返されます。そうしないと、テキストがテキスト ラベルの境界を超えてしまいます (これは望ましくありません)。あなたの問題は、 sizeToFit がラベルのフレームを永久に変更することです。テキストを表示しながら、可能な限り小さくします。フレームのサイズを元のテキストに変更してから、テキストを変更しているため、適切なサイズではなくなります。フレームを元の状態にリセットし、テキストを変更し、最後に size を呼び出して再度合わせる必要があります。

ビューでDidLoad:

self.originalFrame =  self.mainLabelSub1.frame;

次に、viewWillAppear に次のように表示されます。

self.mainLabel1.frame = self.originalFrame;
self.mainLabel1.text = @"New Text";

注: テキスト ラベルの境界線を確認してラッピングの可能性を把握する良い方法は、一時的にラベルの背景を目立つ magentaColor のようなものに設定することです。

于 2013-06-25T05:56:44.150 に答える