2016-11-08 8 views
1

UIStackViewの中にUILabelsの束があります。スタックは、すべてのラベルを同じ幅と高さにしています。ポイントで2小数点を浮動小数点に合わせる

各ラベルは、このように、その中にフロートを持っています

enter image description here

しかし、これは審美的に醜いです。数字をポイントで整列させたい。このように:私の問題の

enter image description here

一つは、これらの山車が異なるラベルであるということです。

これらの数値は、形式にこれを使用します。

[NSString stringWithFormat:@"%.2f", value]; 

でもそれが可能であるならば、私は手掛かりを持っていません。だから、表示するコードはありません。それは可能ですか?どうやって?

編集:浮動小数点はラベルの上に左揃えされます。ラベルの幅を減らして右に揃えることができますが、ラベルの幅を狭くするとインターフェイス上に問題が発生するため、コード内に別のソリューションがあるかどうか疑問に思っています。

+0

はい、私は知っている:例えば、それらはすべて、長い5つの文字である必要があります。私はあなたがそれを入力していると同時に質問に追加...コードで解決策があるのだろうかと思うのは、そうすることでインターフェイス全体が駄目になるからです。 – SpaceDog

+0

ごめんなさい! – SpaceDog

+0

NSTextAlignmentRightを使用します。 –

答えて

3

あなたの編集で言うように、ラベル 'textAlignmentを右に設定したくない場合(確かに最も簡単な解決策です)、別の解決方法があります。

  1. モノスペースの数字を持つフォントを使用する必要があります。 iOS 9以降では、システムフォントはであり、デフォルトではは固定幅の数字を使用しませんが、固定幅の数字を使用するシステムフォントの変形を取得するためのプログラム的な方法があります。 +[UIFont monospacedDigitSystemFontOfSize:weight:]を使用するか、既にUIFontオブジェクトがある場合は、そのフォント記述子に属性を追加してモノスペースの数字のバリアント(存在する場合)を取得することができます。これを行うためのコードはSwiftのthis answerを参照してください。残念ながら、コードなしでストーリーボードやxibでこれを行う方法はありません。

  2. 各ラベルのテキストの先頭に、すべて同じ長さにするには、十分な数のU+2007 FIGURE SPACEを追加する必要があります。

    NSString *text = [NSString stringWithFormat:"%.2f", value]; 
    while (text.length < 5) { 
        text = [@"\u2007" stringByAppendingString:text]; 
    } 
    label.text = text; 
    
1

UILabelを右揃えに設定することができます。ような何か:

label.textAlignment = NSTextAlignmentRight; 

それとも、ユニコード図SPACE、U + 2007を付加可能性がポイントケースの前に一桁のため、これは同じ幅の数字を持つフォントの数字と同じ幅のスペースであるので、すべての数字は同じ幅になります。

1

あなたが本当にUILabelの幅を低下させることなく、コードから、あなたはUILabelのサブクラスを作成し、このメソッドをオーバーライドすることができますことを行う必要がある場合:もちろん

- (void)drawTextInRect:(CGRect)rect { 
    UIEdgeInsets insets = {0, 0, 0, rightOffset}; 
    [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)]; 
} 

あなたにも、右アライメントを使用する必要があります。

+0

これはトリックを行うと思います!ありがとう! – SpaceDog

関連する問題