0

UIViewプログラムで設定された2 つのUILabelオブジェクトを含む があります。UILabel左を右揃え、右を左揃えにしたいですUILabel。これは私のきれいなASCII表現です:

 ___________________
|  ______   ______  |
| |  ASDF| |ASDF  | |
| |______| |______| |
|___________________|

あらゆる種類のマスクと配置プロパティを試しましたが、役に立ちませんでした。これが正しい解決策だと私が思ったものです。おそらく誰かが私の理解の欠陥を指摘することができます.

コンテナーは、可変幅のラベルに合わせて拡張できるようにするUIView必要があります。UIViewAutoResizingFlexibleWidth左と右の両方が可変幅のコンテンツに合わせて拡張するUILabel必要があります。左マージンが固定されたままになるように、UIViewAutoResizingFlexibleWidthUILabelが必要です。右マージンが固定されたままになるように、UIViewAutoresizingFlexibleRightMarginUILabelが必要です。UIViewAutoresizingFlexibleLeftMargin

この実装の概念上の問題:

  • テキストが拡張されると、コンテナに収まるため、互いに拡張することができます

オーバーラップの問題があり、右マージンが本来のように固定されていないように見えますが、右側に大きなギャップがあります。

何が解決策になるか知っている人はいますか?

4

2 に答える 2

0

2つの観察:

  1. AutoresizingMasksは、ビューのサブビューの変更に基づいてビューを拡張するのではなく、スーパービューの変更に基づいて拡張します。ここではそれは重要ではありません。一般に、向きの変更の結果としてスーパービューの寸法が変更される場合などに役立ちます。理論的にはautoresizingMasksを使用する可能性のある状況は他にもありますが、これはその1つではないと思います。

  2. より論理的には、目的のテキストに合わせるために必要なテキストラベルの幅を使用して計算し、それに応じてUILabelのフレームを設定することができます。

2つのテキストラベルのサイズを計算するには、textプロパティを設定すると、次のようになります。

CGSize leftSize  = [leftLabel.text  sizeWithFont:leftLabel.font  forWidth:self.view.frame.size.width lineBreakMode:UILineBreakModeWordWrap];
CGSize rightSize = [rightLabel.text sizeWithFont:rightLabel.font forWidth:self.view.frame.size.width lineBreakMode:UILineBreakModeWordWrap];

2つのラベルのサイズがわかったので、それに応じて2つのラベルのフレームとそのスーパービューを微調整できます。

于 2012-07-03T22:27:58.553 に答える
0

ビューは、UILabelテキストに基づいて自動的にサイズ変更されません。sizeToFitテキストを変更するたびに呼び出す必要がある場合があります。テキストを折り返す場合は、行数の割り当てを手動で処理する必要もあります。

さらに、左のラベルはあるべきではなく、UIViewAutoresizingFlexibleLeftMarginその逆もありませんか? 逆に。

于 2012-07-03T22:05:07.303 に答える