Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Xcode-标签赢得';当数字为十进制时自动收缩_Objective C_Ios_Cocoa Touch - Fatal编程技术网

Objective c Xcode-标签赢得';当数字为十进制时自动收缩

Objective c Xcode-标签赢得';当数字为十进制时自动收缩,objective-c,ios,cocoa-touch,Objective C,Ios,Cocoa Touch,我正在做一个应用程序,计算一些数字,一些答案没有小数点,一些有。所以我做了一个if-else,使用NSNumberFormatter格式化数字,这取决于它们是否有小数 否则,一切正常,数字格式正确,标签自动收缩正确。但是,当数字有小数时,它不会自动收缩。如果所有数字都没有进入标签,它将删除最后的小数,直到没有小数为止。那就行了 例如,如果我有“123456789.123456789”,标签将不会大到足以显示所有这些内容,而是显示“123456789.1234”。如果我更改参数,使答案为10倍,则

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

否则,一切正常,数字格式正确,标签自动收缩正确。但是,当数字有小数时,它不会自动收缩。如果所有数字都没有进入标签,它将删除最后的小数,直到没有小数为止。那就行了

例如,如果我有“123456789.123456789”,标签将不会大到足以显示所有这些内容,而是显示“123456789.1234”。如果我更改参数,使答案为10倍,则答案将为“1234567891.234”。现在,在我转到“1234567891234”之前,它不会自动收缩以让我看到数字。但是,当数字没有小数时,它将自动收缩,我将看到所有的数字

下面是有效的代码(当没有小数时):

以下是不起作用的代码:

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”是双精度的


所以我要做的是让它在第二种情况下起作用。非常感谢

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

代码如下所示:

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

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


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

我不想更改其边界,我想更改字体大小,使其适合标签。实际的UILabel将始终保持相同的大小,但是数字或字体的大小将发生变化。只是尝试了一下,它不起作用。只要有小数点,字体大小就不会调整。如果在if-else的情况下有小数,唯一的区别是我在NSNumberFormatter中使用setNumberStyle:nsnumberforatterdecimalstyle。这可能就是问题所在…嗯
调整字体大小调整宽度
接缝对我来说既适用于“123456789123456789”又适用于“123456789.123456789”,标签会调整字体,以便显示所有文本。你做了一个屏幕截图吗?我添加了代码,看一看!有一些事情我没有提到,你会看到,我希望这将有助于找到问题。谢谢你的帮助!您是否也可以包括相关的标签创建或修改代码?或者至少它是如何设置,大小调整,截断等。我尝试了几次,我没有得到它的工作。看看问题的描述,我已经添加了代码,这可以帮助您理解。谢谢你的建议!将最后一个字符串的末尾加上小数,然后从中获取sizeWithFont:的大小。
NSString *yourString = [NSString stringWithFormat:@"%f", yourNumber];
CGSize labelSize = [yourString sizeWithFont:yourFont];