Yaklaşım 1:
Bu, başlık çubuğu aksesuarı eklenerek yapılır. Bunu AppDelegate.swift dosyasını değiştirerek halledebildim. Doğru görünmesi için biraz tuhaf dolgu uygulamak zorunda kaldım.
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(""))
}
}
Sonuç:
Yaklaşım 2 (Alternatif yöntem):
Buradaki fikir, araç çubuğu bölümünü storyboard kullanarak ve uygulamanın geri kalanını SwiftUI kullanarak yapmaktır. Bu, kullanıcı arayüzü olarak film şeridi ile yeni bir uygulama oluşturularak yapılır. Ardından film şeridine gidin ve varsayılan Görünüm Denetleyicisini silin ve yeni bir tane ekleyin NSHostingController
. Yeni eklenen Hosting Denetleyicisini ilişkisini ayarlayarak ana pencereye bağlayın. Arabirim oluşturucuyu kullanarak araç çubuğunuzu pencereye ekleyin.
Kendinize özel bir sınıf ekleyin NSHostingController
ve SwiftUI görünümünüzü bu klasöre yükleyin.
Aşağıdaki örnek kod:
import Cocoa
import SwiftUI
class HostingController: NSHostingController<SwiftUIView> {
@objc required dynamic init?(coder: NSCoder) {
super.init(coder: coder, rootView: SwiftUIView())
}
}
Bu yaklaşımı kullanmak size araç çubuğunu özelleştirebilmenizi de sağlar.