2016-07-01 79 views
7

我想通過改變其字體使用SF的等寬的數字字體在文本字段中顯示的整數,如下所示:UIFont.monospacedDigitSystemFontOfSize()沒有真正等寬?

textField.font = UIFont.monospacedDigitSystemFontOfSize(textField.font!.pointSize, weight: UIFontWeightSemibold)

但是,如果我設置文本字段的文本在60Hz的頻率,這是結果:

SF monospaced

文本的寬度顯然不是對於相同量的位數,從而它移動所有抖動的,因爲文本字段被約束爲「前」和「後」的恆定下面的圖像。 爲什麼會出現這種情況以及如何解決?

像「萬絡」的另一個真正的等寬字體正確行爲:

Menlo

+0

同樣的事情也發生在其寬度限制的'UILabel'(用「調整到適合」啓用) –

+0

您正在使用的Xcode 8和斯威夫特3我承擔? –

+0

@CodeDifferent沒有,Xcode 7.3.1和Swift 2 –

回答

0

所以它看起來像設置「調整到適合」文本字段的選項覆蓋的字體等寬屬性(即使認爲是大到足以容納文本!)

臨時在這一點的解決方案是

  • 設置textField.adjustsFontSizeToFitWidthfalse
  • 重新設置等寬字體(因爲它在某種程度上通過adjustsFontSizeToFitWidth的setter覆蓋)
  • 開始改變文本
  • 完成後設置textField.adjustsFontSizeToFitWidthtrue再次以用戶行爲正確輸入

這是不是我原本想,但它作爲一種變通方法

enter image description here

+0

@matt你並不是真正的「把我放在這個上面的人」,我發現「適應調整」改變了整個字體而不是大小。但我仍然非常感謝你的努力!請注意,這不是我們接受的答案,我原來的問題仍然存在。我只是想回答問題來自哪裏,並提出可選解決方案。 而且我正在考慮向蘋果公司寫一份錯誤報告 –

+2

這不會殺死你,讓我的答案升級。我花時間在此;我甚至做了一個完整的項目來證明「適應適應」是個問題。如果你不獎勵他們,人們不會有任何動力去幫助你。 – matt

+0

對不起,你是對的 –

1

我有一個使用了「調整到適合」選項一個項目,如果我設置使用didSet的標籤出口等寬的財產,似乎我在Xcode工作8測試版3.

@IBOutlet weak var textLabel: UILabel! { 
    didSet { 
     textLabel = UIFont.monospacedDigitSystemFont(ofSize: textLabel!.pointSize, weight: UIFontWeightRegular) 
    } 
} 
+0

謝謝,我會試試看!但不應該是「textLabel.font =」和「textLabel!.font!.pointSize」嗎? –

0

就我而言,我將UILabel的font屬性設置爲等寬數字字體,並使用attributedText來設置文本。這在iOS 9中工作,但在iOS 10中破解。解決方法是顯式設置屬性字符串中的字體屬性。

0

我遇到了同樣的問題,並沒有設置代碼工作。更新了雨燕4:

@IBOutlet weak var textLabel: UILabel! { 
    didSet { 
     label.font = UIFont.monospacedDigitSystemFont(ofSize: textLabel!.font!.pointSize, weight: UIFont.Weight.regular) 
    } 
}