2016-11-08 75 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

相關問題