2016-03-23 18 views
5

L'impostazione utilizzaSingleLineMode su true per un font non di sistema fa ritagliare la parte superiore del testo.NSTextField contenuto del font non di sistema ritagliato quando viene utilizzato il valore SingleSingleLineMode

Ho creato 3 casi di test molto semplici che illustrano questo:

  • buona: carattere non di sistema, con usesSingleLineMode = false. Funziona bene.
  • difettoso: carattere non di sistema con usesSingleLineMode = true. Non funziona.
  • sistema: carattere di sistema con usesSingleLineMode = true. Funziona bene.

Aggiungere il seguente al metodo viewDidLoad() di una nuova applicazione Cocoa OSX:

// Do any additional setup after loading the view. 
let good = NSTextField(frame: NSRect(x: 0, y: 0, width: 800, height: 55)) 
good.usesSingleLineMode = false 
good.font = NSFont(name: "HelveticaNeue-UltraLight", size: 24) 
good.stringValue = "Good usesSingleLineMode false " 
self.view.addSubview(good) 

let bad = NSTextField(frame: NSRect(x: 0, y: 100, width: 800, height: 55)) 
bad.usesSingleLineMode = true 
bad.font = NSFont(name: "HelveticaNeue-UltraLight", size: 24) 
bad.stringValue = "Bad usesSingleLineMode true" 
self.view.addSubview(bad) 

let system = NSTextField(frame: NSRect(x: 0, y: 200, width: 800, height: 55)) 
system.usesSingleLineMode = true 
system.font = NSFont.systemFontOfSize(24) 
system.stringValue = "Good usesSingleLineMode true, System Font" 
self.view.addSubview(system) 

See the result

Se creo lo stesso bad NSTextField usando Interface Builder in uno storyboard, impostare il font in IB e check Utilizza Single Line Mode in IB funziona benissimo! Ma non sarebbe pratico costruire la vista generale in IB, quindi voglio crearlo a livello di codice.

Perché sta succedendo? Ho perso alcune impostazioni importanti (ho provato la regolazione di molti parametri e NSTextField NSTextFieldCell inutilmente? C'è una soluzione?

+0

Strano, ho anche un pulsante con un carattere personalizzato, ma quando imposto 'UsesSingleLineMode = true', il testo rimane nella sua posizione normale – Eric

+0

" Le celle nella modalità a linea singola utilizzano il layout di base fisso. La posizione di base del testo è determinata esclusivamente dal dimensione del controllo indipendentemente dallo stile o dalla dimensione del carattere del contenuto. "fonte: [usesSingleLineMode] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSCell_Class/#//apple_ref/occ/ instp/NSCell/usesSingleLineMode) – Willeke

+0

Willeke, sono riuscito a ignorarlo, quindi apprezzo che tu lo abbia indicato. Tuttavia, questo non è chiaramente l'intera storia. Se sostituisco HelveticaNeue-UltraLight con solo HelveticaNeue (che è lo stesso del font di sistema), il testo è ancora ritagliato. Mentre se utilizzo NSFont.systemFontOfSize (24) non c'è clipping. Inoltre, tutte le dimensioni di controllo sono identiche, quindi si potrebbe concludere che le linee di base sarebbero identiche. – drootang

risposta

0

Ho lo stesso problema e ho risolto impostando usesSingleLineMode=false

+0

Questo ha funzionato per me. – eonist