Xcode - 当数字为十进制时,标签不会自动收缩



我正在制作一个计算一些数字的应用程序,有些答案没有小数,有些有。所以我做了一个if-else,使用NSNumberFormatter格式化数字,这取决于它们是否有小数。

如果不是,则一切正常,数字格式正确,标签自动缩小正确。但是,当数字有小数时,它不会自动收缩。它将做的是删除最后一个小数,如果所有数字都不会进入标签,直到没有小数。然后它会正常工作

例如,如果我有"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"是一个双精度值。

所以我要做的是让它适用于第二种情况。多谢!

假设这是一个UILabel我认为它不支持在文本更改时自动更改其边界(您可以通过设置背景颜色并查看实际大小来测试它(。

但是,您可以在更新文本后手动将sizeToFit发送到标签,使其更改其边界以适合所有文本。

我不认为你的意思是自动收缩,但你总是可以将数字转换为字符串(无论如何,你必须这样做才能将其放入标签中(,然后使用 NSString 的实例方法 sizeWithFont: 来获取标签显示整个数字所需的大小。

代码将是这样的:

NSString *yourString = [NSString stringWithFormat:@"%f", yourNumber];
CGSize labelSize = [yourString sizeWithFont:yourFont];

相关内容