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
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Create the SwiftUI view that provides the window contents.
let contentView = ContentView()
// Create the titlebar accessory
let titlebarAccessoryView = TitlebarAccessory().padding([.top, .leading, .trailing], 16.0).padding(.bottom,-8.0).edgesIgnoringSafeArea(.top)
let accessoryHostingView = NSHostingView(rootView:titlebarAccessoryView)
accessoryHostingView.frame.size = accessoryHostingView.fittingSize
let titlebarAccessory = NSTitlebarAccessoryViewController()
titlebarAccessory.view = accessoryHostingView
// Create the window and set the content view.
window = NSWindow(
contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
backing: .buffered, defer: false)
window.center()
window.setFrameAutosaveName("Main Window")
// Add the titlebar accessory
window.addTitlebarAccessoryViewController(titlebarAccessory)
window.contentView = NSHostingView(rootView: contentView)
window.makeKeyAndOrderFront(nil)
}
TitlebarAccessory.swift
import SwiftUI
struct TitlebarAccessory: View {
var body: some View {
TextField("Placeholder", text: .constant(""))
}
}
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:
import Cocoa
import SwiftUI
class HostingController: NSHostingController<SwiftUIView> {
@objc required dynamic init?(coder: NSCoder) {
super.init(coder: coder, rootView: SwiftUIView())
}
}
Mit diesem Ansatz können Sie auch die Symbolleiste anpassen.