如何将所有连字符设置在相同的垂直位置? 我使用下一个代码:
subText = [NSString stringWithFormat:@"%3d%% - %@",subPercent,subfactor];
NSLog(@"%@",subText);
[label setText:subText];
但它看起来像是:http://i.stack.imgur.com/amei7.png
在故事板中创建的标签,并保留了文本对齐方式。 应用程序适用于iOS 7 +
UPD。
看起来很疯狂,但工作。
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];
}
必须是更好的解决方案。
答案 0 :(得分:1)
标签怎么样?它很简单。
subText = [NSString stringWithFormat:@"%3d%%\t-\t%@",subPercent,subfactor];
答案 1 :(得分:1)
您的数字不排列的原因是数字和空格的宽度不同。然而,在许多字体中,固定宽度和比例,所有数字都是相同的宽度,而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
的{{1}}。
您可以做得更好,并NSNumber
格式化NSNumberFormatter
和0
之间的浮点数作为百分比,并在当前区域设置中使用相应的百分比符号。为此,请使用以下方法设置格式化程序:
1
如果您要格式化的值是整数,只需将其除以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
这是“更好的解决方案”吗?你必须决定这一点,还有很多其他方法。
HTH
(为了好玩:如果你想坚持int value = 42; // a value between 0 -> 100
NSString *formatted = [formatter stringFromNumber:@(value / 100.0)];
,请考虑一个整数的基数10日志告诉你它有多少位数,并且你可以打印字符串(想想填充)具有可变字段宽度 - 您可以通过一些数学运算来避免三向stringWithFormat
答案 2 :(得分:0)
为什么不使用三种不同的UILabel
?我认为它会比这些“魔术”空间更清洁!
您必须想象如果您有其他单词或其他数字值,您仍然会使用这种方法吗?!
答案 3 :(得分:0)
当您不使用固定宽度字体时,似乎此问题与用于填充的空间宽度有关。如果您使用像Courier这样的固定宽度字体,那么您的代码就可以正常工作(但快递很难看)。对于可变宽度字体,我发现您需要将%4d用于2位数字,将%5d用于1位数字。你可以这样做,
subText = [NSString stringWithFormat:@"%*d%% - %@", 6 - (int)[NSString stringWithFormat:@"%d",subpercent].length, sub percent, subfactor];