2015-09-24 10 views

Antwort

10

Ich habe den gleichen Fehler, wenn ich die Schriftgröße auf Semibold auf ein Label mit Systemschriftart festlegen. Dieses Gewicht ist für die neue Systemschriftart (San Francisco) verfügbar, aber nicht für die alte Helvetica Neue, also denke ich, dass dieser Fehler bedeutet, dass wir nicht das richtige Gewicht auf älteren OS bekommen.

Ändern der Schrift auf ein Gewicht auch für Helvetica Neue, Bold in meinem Fall, hat den Fehler für mich behoben.

+4

Beachten Sie, dass der Fehler weiterhin besteht, wenn Sie die Schriftgröße auf "Medium" setzen, die in beiden Schriftfamilien verfügbar ist. – Henrik

2

Das Problem ist nicht mit dem Ändern der Systemschriftart, das Problem ist, dass Xcode diese nicht richtig behandelt - widersprüchliche Aussage, ich weiß, siehe full blog post für Details. Es gibt drei Szenarien.

Erstens - explizite Typografie ist nicht wichtig, normales Gewicht ist akzeptabel. Dann bleiben Sie bei Marcos Antwort und verwenden Sie explizites normales Gewicht.


Zweitens - explizite Typografie ist vorzuziehen, kann aber auf älteren Systemen kompromittiert werden. Dies ist das Standardverhalten, Xcode zeigt einfach eine Warnung an und verwendet eine normale Schriftart für Pre-10.11-Ziele. Wenn Sie adaptive Layouts verwenden, sollte alles in Ordnung sein. Um erhalten die Warnung loswerden, können Sie einfach höher eingestellt Ziel im Storyboard-Inspektor:

Hinweis, wenn Ihr Storyboard Ausweichfunktionen für frühere Ziele verwendet, können sie deaktiviert werden, was zu Problemen führen - I haven Ich bin noch nie auf etwas gestoßen.


Dritte - explizite Typografie ist ein Muss. In diesem Fall können Sie ein benutzerdefiniertes Textfeld mit benutzerdefinierten inspectiven Eigenschaften verwenden. Öffnen Sie den Identity Inspector und setzen Sie die benutzerdefinierte Klasse auf TextField, das Attribut für die bevorzugte Schriftgröße wird im Attributinspektor angezeigt, legen Sie den erforderlichen Wert fest, erstellen Sie und genießen Sie das Ergebnis.

import AppKit 

@IBDesignable public class TextField: NSTextField 
{ 
    @IBInspectable public var preferredFontWeight: Int = 0 

    override public func awakeFromNib() { 
     if #available(OSX 10.11, *) { 
      return 
     } 

     guard 
     let weight: Int = self.preferredFontWeight where weight > 0, 
     let font: NSFont = self.font, 
     let name: String = font.familyName, 
     let manager: NSFontManager = NSFontManager.sharedFontManager() else { 
      return 
     } 

     // Full details here – https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSFontManager_Class/#//apple_ref/occ/instm/NSFontManager/convertWeight:ofFont: 
     // 
     // 1 – ultralight 
     // 2 – thin 
     // 3 – light, extralight 
     // 4 – book 
     // 5 – regular, display 
     // 6 – medium 
     // 7 – demi, demibold 
     // 8 – semi, semibold 
     // 9 – bold 
     // 10 – extra, extrabold 
     // 11 – heavy 
     // 12 – black 
     // 13 – ultrablack 
     // 14 – extrablack 

     if let font: NSFont = manager.fontWithFamily(name, traits: manager.traitsOfFont(font), weight: weight, size: font.pointSize) { 
      self.font = font 
     } 
    } 
} 

P.S. Fettes Gewicht funktioniert wahrscheinlich, weil es eine etwas andere Logik verwendet - es gibt boldSystemFontOfSize(_:), die seit OS X 10.0 verfügbar ist, im Gegensatz zu vielen anderen Methoden, auf die sich das Storyboard verlassen könnte.