我在垂直UILabels
内有一堆UIStackView
。堆栈使所有标签具有相同的宽度和高度。
每个标签都有一个浮动,如下所示:
但这在美学上是丑陋的。我想按点对齐数字。像这样:
我的一个问题是这些花车有不同的标签。
这些数字使用此格式:
[NSString stringWithFormat:@"%.2f", value];
即使有可能,我也不知道。所以,我没有代码可以显示。有可能吗?怎么样?
编辑:浮标在标签上左对齐。好吧,我可以减少标签宽度并将它们对齐到右边,但是我想知道代码中是否还有其他解决方案,因为减少标签的宽度会导致界面上出现其他问题,从而破坏了整个过程。
答案 0 :(得分:4)
如果您的编辑说明,您不想设置标签' textAlignment
向右(这当然是最简单的解决方案),这是另一种解决方案。你需要做两件事:
您需要使用带有等宽数字的字体。在iOS 9及更高版本中,默认情况下系统字体不使用等宽数字,但是有一些编程方法可以获得使用等宽数字的系统字体变体。您可以使用+[UIFont monospacedDigitSystemFontOfSize:weight:]
,或者如果您已经拥有UIFont
对象,则可以通过向其字体描述符添加属性来获取等宽数字变量(如果有)。有关执行此操作的代码,请参阅this answer(在Swift中)。不幸的是,在没有代码的故事板或xib中无法做到这一点。
您需要在每个标签文本的开头添加足够的U+2007 FIGURE SPACE以使它们具有相同的长度。例如,如果它们都应该是五个字符长:
NSString *text = [NSString stringWithFormat:"%.2f", value];
while (text.length < 5) {
text = [@"\u2007" stringByAppendingString:text];
}
label.text = text;
答案 1 :(得分:1)
您可以尝试将UILabel
设置为右对齐,例如类似的东西:
label.textAlignment = NSTextAlignmentRight;
或者对于点数大小之前的单个数字,您可以添加Unicode数字空间,U + 2007,这是一个宽度与宽度相等的字体中的数字相同的空格,因此所有数字都是相同的宽度
答案 2 :(得分:1)
如果你确实需要在不降低UILabel宽度的情况下从代码中执行此操作,则可以继承UILabel并覆盖此方法:
- (void)drawTextInRect:(CGRect)rect {
UIEdgeInsets insets = {0, 0, 0, rightOffset};
[super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}
当然你也应该使用正确的对齐方式。