2016-07-01 9 views
7

Ich wollte SF dicktengleiche Ziffern Schriftart verwenden, indem seine Schrift eine ganze Zahl in einem Textfeld angezeigt werden wie folgt:UIFont.monospacedDigitSystemFontOfSize() nicht wirklich monospaced?

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

Aber wenn ich den Text des Textfeldes in einer 60 Hz-Frequenz eingestellt, das ist das Ergebnis:

SF monospaced

die Breite des Textes ist eindeutig nicht konstant für eine gleiche Menge an Stellen, so dass es alle nervösen, weil das Textfeld „führende“ gezwungen ist, sich bewegt und „trailing“ von das Bild darunter. Warum ist das der Fall und wie kann man das beheben?

Eine andere wirklich proportionale Schrift wie „Menlo“ verhält sich richtig:

Menlo

+0

Gleiche geschieht auch ein 'UILabel' in seiner Breite begrenzt (mit„einpassen“aktiviert) –

+0

Sie verwenden Xcode 8 und Swift 3 Ich gehe davon aus? –

+0

@CodeDifferent Nein, Xcode 7.3.1 und Swift 2 –

Antwort

0

So scheint es, wie Einstellung der „einpassen“ Option des Textfeldes wird die dicktengleiche Eigenschaft der Schriftart überschreiben (auch wenn die Aussicht ist groß genug, um den Text zu enthalten!)

Meine temporäre Lösung an dieser Stelle ist zu

  • Set textField.adjustsFontSizeToFitWidth-false
  • die nichtproportionalen Schrift wieder Set
  • Beginnen Sie ändern den Text
  • (wie es irgendwie durch adjustsFontSizeToFitWidth der Setter überschrieben wurde) Bei der Einstellung textField.adjustsFontSizeToFitWidth auf true wieder, um fertig zu korrekt auf Benutzer verhalten Eingang

Dies ist nicht, was ich wollte ursprünglich, aber es funktioniert als Behelfslösung

enter image description here

+0

@matt Sie waren nicht wirklich "derjenige, der mich auf diese" setzte, ich fand heraus, dass "adjust to fit" die ganze Schriftart ändert und nicht die Größe. Aber ich schätze deine Bemühungen immer noch sehr! Beachten Sie, dass dies nicht die akzeptierte Antwort ist, mein ursprüngliches Problem ist immer noch übrig.Ich wollte nur eine Antwort geben, woher das Problem kommt und eine optionale Lösung präsentieren. Und ich überlege, einen Fehlerbericht zu schreiben Apple –

+2

Es hätte dich nicht getötet, um meine Antwort zu verbessern. Ich habe Zeit damit verbracht; Ich habe sogar ein ganzes Projekt gemacht, um zu beweisen, dass "adjust to fit" das Problem war. Die Menschen werden keinen Anreiz haben, Ihnen zu helfen, wenn Sie sie nicht belohnen. – matt

+0

Es tut mir leid, Sie haben Recht –

1

Ich habe ein Projekt, das die „einpassen“ Option verwendet und wenn ich die dicktengleiche Eigenschaft mit didSet für das Label Ausgang gesetzt, so scheint es für mich in Xcode 8 Beta zu arbeiten 3.

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

Danke, ich werde das ausprobieren! Aber sollte es nicht "textLabel.font =" und "textLabel! .font! .pointSize" sein? –

0

In meinem Fall habe ich die font Eigenschaft eines UILabel zu einem monospaced digit font gesetzt und attributedText verwendet, um den Text festzulegen. Dies funktionierte in iOS 9, brach aber in iOS 10. Die Problemumgehung besteht darin, das font-Attribut explizit in der attributierten Zeichenfolge festzulegen.

0

Ich hatte das gleiche Problem und Code eingestellt funktioniert. Aktualisiert für Swift 4:

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