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”是一个双精度数。

所以我想做的是让它适用于第二种情况。非常感谢!

4

2 回答 2

0

假设这是一个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 回答