0

私はいくつかの数値を計算するアプリケーションを作成しています.いくつかの答えには小数がなく、いくつかはあります。NSNumberFormatterそこで、小数があるかどうかに応じて数値をフォーマットするために、if-else を作成しました。

そうでない場合、すべてが正常に機能し、数値が正しくフォーマットされ、ラベルが正しく自動縮小されます。ただし、数値に小数がある場合、自動縮小されません。小数がなくなるまで、すべての数値がラベルに入らない場合は、最後の小数を削除します。そしたらうまくいく

たとえば、「123,456,789.123456789」がある場合、ラベルはそのすべてを表示するのに十分な大きさではなく、代わりに「123,456,789.1234」と表示されます。答えが10倍になるようにパラメータを変更すると、答えは「1,234,567,891.234」になります。「1,234,567,891,234」に到達するまで、数値を表示するために自動縮小しません。ただし、数値に小数がない場合は自動縮小され、すべての数値が表示されます。

動作するコードは次のとおりです(小数点がない場合):

NSNumber *input = [NSNumber numberWithDouble: numberDouble];  
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];  
[formatter setGroupingSize:3];  
[formatter setGroupingSeparator:@","];  
[formatter setUsesGroupingSeparator:YES];  
stringWithDecimals = [formatter stringFromNumber:input];  
NSMutableString* someString = [NSMutableString stringWithString: stringWithDecimals];  
[someString appendString: @" unit"];  
stringWithDecimals = someString;  
label.text = stringWithDecimals;  

動作しないコードは次のとおりです。

NSNumber *input = [NSNumber numberWithDouble: numberDouble];  
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];  
[formatter setGroupingSize:3];  
[formatter setGroupingSeparator:@","];  
[formatter setUsesGroupingSeparator:YES];  
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];  
[formatter setRoundingMode: NSNumberFormatterRoundHalfUp];  
stringWithDecimals = [formatter stringFromNumber:input];  
NSMutableString* someString = [NSMutableString stringWithString: stringWithDecimals];  
[someString appendString: @" unit"];  
stringWithDecimals = someString;  
label.text = stringWithDecimals;  

変数 "numberDouble" は double です。

だから私がやろうとしているのは、2番目のケースで機能させることです。どうもありがとう!

4

2 に答える 2

0

これが a であると仮定するとUILabel、テキストが変更されたときに境界を自動的に変更することはサポートされていないと思います (背景色を設定して実際のサイズを確認することでテストできます)。

ただし、テキストを更新した後に手動でラベルに送信sizeToFitして、すべてのテキストに合わせて境界を変更することができます。

于 2012-05-18T17:40:46.493 に答える
0

自動縮小を意味しているとは思いませんが、いつでも数値を文字列に変換して(とにかく、ラベルに入れるために行う必要があります)、NSStringのインスタンスメソッド sizeWithFont: を使用して必要なサイズを取得できます番号全体を表示するには、ラベルを使用します。

コードは次のようになります。

NSString *yourString = [NSString stringWithFormat:@"%f", yourNumber];
CGSize labelSize = [yourString sizeWithFont:yourFont];
于 2012-05-18T17:24:34.633 に答える