按点将浮点数与两位小数对齐

Spa*_*Dog 1 objective-c cgfloat ios

UILabels里面有一堆垂直的UIStackView。堆栈使所有标签具有相同的宽度和高度。

每个标签都有一个浮点数,如下所示:

在此处输入图片说明

但这在美学上是丑陋的。我想按点对齐数字。像这样:

在此处输入图片说明

我的问题之一是这些花车位于不同的标签中。

这些数字使用它来格式化:

[NSString stringWithFormat:@"%.2f", value];
Run Code Online (Sandbox Code Playgroud)

我不知道是否有可能。所以,我没有代码可以显示。有可能这样做吗?如何?

编辑:浮动在标签上左对齐。好的,我可以减少标签宽度并将它们向右对齐,但我想知道代码中是否有另一种解决方案,因为减少标签的宽度会导致界面上出现其他问题,从而破坏整个事情。

rob*_*off 5

如果,正如您的编辑所说,您不想将标签设置textAlignment为正确(这当然是最简单的解决方案),这是另一种解决方案。你需要做两件事:

  1. 您需要使用等宽数字的字体。在 iOS 9 及更高版本中,系统字体默认使用等宽数字,但有一些编程方法可以获得使用等宽数字的系统字体变体。您可以使用+[UIFont monospacedDigitSystemFontOfSize:weight:],或者如果您已经有一个UIFont对象,您可以通过向其字体描述符添加属性来获得等宽数字变体(如果有的话)。请参阅此答案以获取执行此操作的代码(在 Swift 中)。不幸的是,没有代码就无法在故事板或 xib 中做到这一点。

  2. 您需要在每个标签文本的开头添加足够的U+2007 Figure SPACE以使其长度相同。例如,如果它们都应该是五个字符长:

    NSString *text = [NSString stringWithFormat:"%.2f", value];
    while (text.length < 5) {
        text = [@"\u2007" stringByAppendingString:text];
    }
    label.text = text;
    
    Run Code Online (Sandbox Code Playgroud)