2016-11-16 2 views
0

Ich möchte eine höhere Ansicht (27pt) als Trennlinie für eine NSSplitView verwenden, die vertikal gestapelt ist (splitView.isVertical = false). Gibt es einen beabsichtigten Weg? Wenn nicht, gibt es einen gemeinsamen Hack?Kann ich eine benutzerdefinierte Ansicht als Teiler von NSSplitView verwenden?

Ich dachte daran, einen dünnen Teiler zu verwenden und Mausbewegungen in der benutzerdefinierten Ansicht zu überwachen und diese zu verwenden, um die Position des Teilers programmgesteuert zu ändern. Ist das ein gültiger Ansatz?

+0

Vielleicht hat der Delegierte einige Methoden, dies zu tun? Hast du überprüft? – Willeke

+0

@Willeke ['NSSplitViewDelegate'] (https://developer.apple.com/reference/appkit/nssplitviewdelegate) enthält keine Funktionen, die ein' NSView' oder ähnliches zurückgeben –

+0

Wie wäre es mit 'splitView (_: effectiveRect: forDrawnRect: ofDividerAt:) 'und' splitView (_: additionalEffectiveRectOfDividerAt:) '? – Willeke

Antwort

1

Ein Ansatz, der nicht Maus hören erfordert zieht oder eine aktive Aktualisierung der Ansicht ist die automatische Layout zu verwenden:

1. Aufschalten dividerThickness Ihre ideale Dicke zurückzukehren.

2. Überschreiben Sie dividerColor, um zurück zu geben, wenn Ihre benutzerdefinierte Ansicht nicht undurchsichtig ist und wenn Sie nicht möchten, dass das Standardgrau durchscheint.

Wenn Sie ein minimales Implementierungsziel von 10.11 oder später:

3a. Setzen Sie in der Split-Ansicht arrangesAllSubviews auf NO, und fügen Sie dann die benutzerdefinierte Teileransicht als Unteransicht der Split-Ansicht hinzu. (Ohne arrangesAllSubviews auf NO zu setzen, das Hinzufügen der benutzerdefinierten Teiler Ansicht würde es als Spaltbereich hinzufügen)

Andernfalls, wenn Ihr Mindestimplementierungsziel ist < 10.11 (oder Sie können sonst nicht gesetzt arrangesAllSubviews auf NO):

3b. hinzufügen Ihre benutzerdefinierten Teiler als Subview des Behälters aus der geteilten Ansicht, aber dafür, dass es höher in subview/z-Reihenfolge

4. Constraints In dieser Ansicht zu positionieren, wo der Teiler sein würde, zum Beispiel:

let constraints = [dividerView.topAnchor.constraint(equalTo: topPane.bottomAnchor), 
        dividerView.bottomAnchor.constraint(equalTo: topPane.bottomAnchor), 
        dividerView.leadingAnchor.constraint(equalTo: splitView.leadingAnchor), 
        dividerView.trailingAnchor.constraint(equalTo: splitView.trailingAnchor)] 
NSLayoutConstraint.activate(constraints) 

Auto-Layout wird sich um die Aktualisierung der Position der Teileransicht kümmern, wenn der Benutzer zieht.

+0

Hallo, weißt du, was arrangesAllSubviews tun? Meine App stürzt damit ab, aber damit habe ich eine Warnung bekommen, die aus ist –

Verwandte Themen