2016-03-23 12 views
5

Wenn Sie usesSingleLineMode auf True für eine Nicht-Systemschriftart festlegen, wird der obere Teil des Texts abgeschnitten.NSTextField Nicht-Systemschriftart-Inhalt abgeschnitten, wenn usesSingleLineMode wahr ist

Ich habe drei sehr einfache Testfälle erstellt, die dies veranschaulichen:

  • gut: Nicht-System-Schriftart, mit usesSingleLineMode = false. Funktioniert gut.
  • fehlerhaft: Nicht-Systemschriftart mit usesSingleLineMode = true. Funktioniert nicht.
  • System: Systemschriftart mit usesSingleLineMode = true. Funktioniert gut.

Fügen Sie den folgenden auf die viewDidLoad() -Methode einer neuen Cocoa OSX Anwendung:

// 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

Wenn ich den gleichen bad NSTextField mit Interface Builder in einem Storyboard erstellen, die festgelegt Schriftart in IB und überprüfen Verwendet Single Line Mode in IB es funktioniert gut! Aber es wäre unpraktisch, die Gesamtansicht in IB zu erstellen, also möchte ich sie programmatisch erstellen.

Warum passiert das? Habe ich verpasst einige wichtige Einstellung (Ich habe versucht, viele NSTextField und NSTextFieldCell Parameter ohne Erfolg eingestellt? Gibt es eine Abhilfe?

+0

seltsame Einstellung, ich habe eine Schaltfläche mit einer benutzerdefinierten Schriftart, aber wenn ich 'UsesSingleLineMode = true 'festlege, bleibt der Text an seinem normalen Platz. – Eric

+0

" Zellen im einzeiligen Modus verwenden das feste Grundlinienlayout. Die Position der Textgrundlinie wird ausschließlich durch die Kontrollgröße unabhängig von der Schriftart oder -größe des Inhalts. "source: [usesSingleLineMode] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSCell_Class/#//apple_ref/occ/ instp/NSCell/usesSingleLineMode) – Willeke

+0

Willeke, das habe ich übersehen, deshalb weiß ich es zu schätzen, dass Sie darauf hingewiesen haben. Dies ist jedoch eindeutig nicht die ganze Geschichte. Wenn ich HelveticaNeue-UltraLight mit nur HelveticaNeue (das ist die gleiche wie die Systemschriftart) ersetzen, wird der Text immer noch abgeschnitten. Wenn ich NSFont.systemFontOfSize (24) verwende, gibt es kein Clipping. Außerdem sind alle Kontrollgrößen identisch, daher würde man zu dem Schluss kommen, dass die Baselines identisch sind. – drootang

Antwort

0

ich das gleiche Problem haben, und ich löste es durch usesSingleLineMode=false

+0

Dies funktionierte für mich. – eonist

Verwandte Themen