2015-11-19 36 views
6

我有一個UILabel,它以格式MM:ss:SS(分鐘,秒,釐秒)顯示計時器的輸出,但是它會從左到右「搖動」釐秒變化 - 例如,「11」比「33」窄。iOS在數字變化時防止計時器UILabel'抖動'

有什麼辦法可以緩解嗎?我嘗試過將它定中心,給它一個固定的寬度,但他們似乎沒有幫助。

+0

給一個具有最高可能性的標籤的固定寬度約束。因爲前33:33:33應該完全包含在其中。給標籤一些背景顏色。它會在一定程度上解決你的問題 –

+1

使用textkit,你可以指定所有的數字應該是相等的寬度。 – milo526

回答

10

從iOS 9.0開始,系統字體使用比例數字。如果你想要等寬數字,你可以使用+[UIFont monospacedDigitSystemFontOfSize:weight:]獲得一個變體字體。這僅適用於系統字體。

如果你想使用另一種字體,你可以嘗試要求一個等寬的變體,但可能沒有。給定一個UIFont,你可以請求它的fontDescriptor,然後要求使用-[UIFontDescriptor fontDescriptorWithSymbolicTraits:]UIFontDescriptorTraitMonoSpace的一個相同的字體描述符,這個描述符是等寬的(不僅僅是數字)。然後,您可以通過將新的字體描述符傳遞到+[UIFont fontWithDescriptor:size:]來創建新的字體。

但是,我懷疑是否有Impact的等寬變體。它不適合你的目的。

+0

並且這也適用於自定義字體嗎?在這種情況下,我正在使用'Impact' –

+0

這正是我的評論意思,只是找不到足夠快的速度;) – milo526

+1

@ChrisByatt對於沒有單聲道間隔數字設置的字體,這不起作用。 – milo526

1

使用等寬字體,也稱爲固定間距,固定寬度或非比例字體,是一種字體,每個字母和字符都佔用相同數量的水平空間。等寬字體的示例包括Courier,Courier New,Lucida Console,Monaco和Consolas

+0

只有Courier,Courier New包含在Xcode項目中。但是,這些字體每個字符都有相同的寬度。不錯。 – coolcool1994