gpt4 book ai didi

ios - 为什么字符串格式在 UILabel 中不起作用?

转载 作者:行者123 更新时间:2023-11-29 10:35:58 25 4
gpt4 key购买 nike

如何将所有连字符设置在同一垂直位置?我使用下一个代码:

subText = [NSString stringWithFormat:@"%3d%% - %@",subPercent,subfactor];
NSLog(@"%@",subText);
[label setText:subText];

但它看起来像:http://i.stack.imgur.com/amei7.png

在 Storyboard 中创建的标签并保持文本对齐。应用在 iOS 7+ 上运行

更新。

它看起来很疯狂,但有效。

if (subPercent == 100) {
subText = [NSString stringWithFormat:@"%d%% - %@",subPercent,subfactor];
} else if (subPercent > 9) {
subText = [NSString stringWithFormat:@" %d%% - %@",subPercent,subfactor];
} else {
subText = [NSString stringWithFormat:@" %d%% - %@",subPercent,subfactor];
}

一定是更好的解决方案。

最佳答案

您的数字不对齐的原因是数字和空格的宽度不同。然而,在许多字体中,固定宽度和比例,所有数字都是相同的宽度,Unicode 有一个“数字空间”字符 U+2007,这是一个数字宽度空间。不幸的是 printf 来自前 Unicode 时代并且不知道图形空间。

但是 NSNumberFormatter 是完全 Unicode 和本地化感知的。要将 0 到 100 之间的整数值格式化为 3 个等宽字符的 NSString,您首先要定义格式化程序:

NSNumberFormatter *formatter = [NSNumberFormatter new];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
formatter.formatWidth = 3;
formatter.paddingCharacter = @"\u2007"; // figure (digit) space

然后用它来格式化你的数字:

int value = 42; // a value between 0 -> 100
NSString *formatted = [formatter stringFromNumber:@(value)];

(注意 @(...)int 转换为 NSNumber)。

你可以做得比这更好,让 NSNumberFormatter01 之间的 float 格式化为百分比,并用适当的符号完成当前语言环境中的百分比。为此,使用以下方法设置格式化程序:

NSNumberFormatter *formatter = [NSNumberFormatter new];
formatter.numberStyle = NSNumberFormatterPercentStyle;
formatter.formatWidth = 4; // 4 = 3 digits + percent symbol
formatter.maximumFractionDigits = 0; // so we get a whole number (unless you want x.y%)
formatter.paddingCharacter = @"\u2007"; // figure (digit) space

如果要格式化的值是一个整数,只需将它除以 100.0:

int value = 42; // a value between 0 -> 100
NSString *formatted = [formatter stringFromNumber:@(value / 100.0)];

这是“更好的解决方案”吗?你必须做出决定,还有很多其他方法。

HTH

(为了好玩:如果您想坚持使用 stringWithFormat,请考虑整数的以 10 为底的对数告诉您它有多少位数,并且您可以打印字符串 (考虑填充)具有可变字段宽度 - 您可以通过一些数学来避免三向 if)

关于ios - 为什么字符串格式在 UILabel 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27071264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com