Ich versuche, einer macOS-App mit SwiftUI eine Symbolleiste in der Titelleiste hinzuzufügen, ähnlich wie unten gezeigt.
Ich kann mit SwiftUI keinen Weg finden, dies zu erreichen. Derzeit habe ich meine Symbolleiste (die nur ein Textfeld enthält) in meiner Ansicht, möchte sie jedoch in die Titelleiste verschieben.
Mein aktueller Code:
struct TestView: View {
var body: some View {
VStack {
TextField("Placeholder", text: .constant("")).padding()
Spacer()
}
}
}
In meinem Fall muss sich das Textfeld in der Symbolleiste befinden.
macos
swiftui
macos-catalina
Bijoy Thangaraj
quelle
quelle
Antworten:
Ansatz 1:
Dies erfolgt durch Hinzufügen eines Titelleistenzubehörs. Ich konnte dies erreichen, indem ich die Datei AppDelegate.swift änderte. Ich musste einige seltsame Polster auftragen, damit es richtig aussah.
AppDelegate.swift
TitlebarAccessory.swift
Ergebnis:
Ansatz 2 (alternative Methode):
Die Idee hier ist, den Symbolleisten-Teil mit Storyboard und den Rest der App mit SwiftUI zu erledigen. Dazu wird eine neue App mit Storyboard als Benutzeroberfläche erstellt. Gehen Sie dann zum Storyboard, löschen Sie den Standard-View-Controller und fügen Sie einen neuen hinzu
NSHostingController
. Verbinden Sie den neu hinzugefügten Hosting Controller mit dem Hauptfenster, indem Sie seine Beziehung festlegen. Fügen Sie Ihre Symbolleiste mit dem Interface Builder zum Fenster hinzu.Hängen Sie eine benutzerdefinierte Klasse an Ihre an
NSHostingController
und laden Sie Ihre SwiftUI-Ansicht hinein.Beispielcode unten:
Mit diesem Ansatz können Sie auch die Symbolleiste anpassen.
quelle