2016-11-08 89 views
1

我在垂直UIStackView内有一堆UILabels。堆栈使所有标签具有相同的宽度和高度。以点两位小数对齐浮点数

每个标签中有一个浮动,就像这样:

enter image description here

但是,这是丑陋的美学。我想按照这一点来对齐数字。就像这样:

enter image description here

我的一个问题是,这些彩车是在不同的标签。

这些号码使用此格式:

[NSString stringWithFormat:@"%.2f", value]; 

我没有头绪,如果连它是可能的。所以,我没有任何代码可以显示。有可能这样做吗?怎么样?

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

+0

是的,我知道。我在同一时间将这个问题添加到了问题中......我想知道是否有代码中的解决方案,因为这样做会毁掉整个界面。 – SpaceDog

+0

对不起! – SpaceDog

+0

使用NSTextAlignmentRight。 –

回答

3

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

  1. 你需要使用一个等宽数字的字体。在iOS 9及更高版本中,系统字体默认使用等宽数字,但系统字体不是而是,但有编程方式可以获得使用等宽数字的系统字体变体。你可以使用+[UIFont monospacedDigitSystemFontOfSize:weight:],或者如果你已经有一个UIFont对象,你可以通过给它的字体描述符添加一个属性来得到一个等宽数字的变体(如果有的话)。有关代码,请参阅this answer(在Swift中)。不幸的是,没有办法在故事板或没有代码的xib中做到这一点。

  2. 您需要将足够的U+2007 FIGURE SPACE s添加到每个标签文本的开头,以使它们具有相同的长度。例如,如果他们都应该是5个字符:

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

您可以尝试将UILabel设置为右对齐,例如,喜欢的东西:

label.textAlignment = NSTextAlignmentRight; 

或为个位数点的情况下之前,你可以预先设置的Unicode图空间,U + 2007,这是具有相同宽度的数字的字体等宽数字,所以空间所有数字将是相同的宽度。

1

如果你真正需要做的,从代码不降低UILabel的宽度,你也可以继承的UILabel和重写此方法:

- (void)drawTextInRect:(CGRect)rect { 
    UIEdgeInsets insets = {0, 0, 0, rightOffset}; 
    [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)]; 
} 

当然,你应该使用右对齐为好。

+0

我认为这将会诀窍!谢谢! – SpaceDog