2015-09-24 9 views

risposta

10

Ho ricevuto lo stesso errore quando ho impostato il peso del font su Semibold su un'etichetta con il carattere di sistema. Questo peso è disponibile per il nuovo font di sistema (San Francisco) ma non per la vecchia Helvetica Neue, quindi suppongo che quell'errore significhi che non avremo il peso giusto sul vecchio sistema operativo.

La modifica del carattere a un peso disponibile anche per Helvetica Neue, Bold nel mio caso, ha corretto l'errore per me.

+4

Si noti che se si imposta il carattere su 'Media', che è disponibile in entrambe le famiglie di caratteri, l'errore persiste. – Henrik

2

Il problema non è con la modifica del peso del font di sistema, il problema è che Xcode non lo gestisce correttamente - affermazione contraddittoria, lo so, vedere full blog post per i dettagli. Ci sono tre scenari.

Primo: la tipografia esplicita non è importante, il peso normale è accettabile. Quindi segui la risposta di Marco e usa il peso regolare esplicito.


Secondo: la tipografia esplicita è preferibile, ma può essere compromessa su sistemi precedenti. Questo è il comportamento predefinito in questo momento, Xcode mostra semplicemente un avvertimento e usa font regolari su target pre-10.11. Se si utilizzano layout adattivi, tutto dovrebbe andare bene. Per sbarazzarsi del l'avviso, si può semplicemente impostare obiettivi più elevati ispettore storyboard:

nota, se il vostro storyboard utilizza le funzionalità di fallback per gli obiettivi precedenti, potrebbero diventare disabili, che causerà problemi - Mi rifugio non ne ho mai visto così lontano.


Terzo: la tipografia esplicita è un must. In questo caso è possibile utilizzare un campo di testo personalizzato con proprietà personalizzate ispezionabili. Apri la finestra di ispezione dell'identità e imposta la classe personalizzata su TextField, l'attributo di peso font preferito verrà visualizzato nell'ispettore Attributi, imposta il valore richiesto, crea e gusta il risultato.

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. Il grassetto funziona probabilmente perché utilizza una logica leggermente diversa: c'è lo boldSystemFontOfSize(_:) disponibile da OS X 10.0, a differenza di molti altri metodi su cui lo storyboard potrebbe basarsi.