Cách tiếp cận 1:
Điều này được thực hiện bằng cách thêm một phụ kiện thanh tiêu đề. Tôi đã có thể thực hiện điều này bằng cách sửa đổi tệp AppDelegate.swift. Tôi đã phải áp dụng một số phần đệm kỳ lạ để làm cho nó trông đúng.
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(""))
}
}
Kết quả:
Cách tiếp cận 2 (Phương pháp thay thế):
Ý tưởng ở đây là thực hiện phần thanh công cụ bằng bảng phân cảnh và phần còn lại của ứng dụng bằng SwiftUI. Điều này được thực hiện bằng cách tạo một ứng dụng mới với bảng phân cảnh là giao diện người dùng. Sau đó, đi đến bảng phân cảnh và xóa Trình điều khiển xem mặc định và thêm một cái mới NSHostingController
. Kết nối Bộ điều khiển Hosting mới được thêm vào cửa sổ chính bằng cách đặt mối quan hệ của nó. Thêm thanh công cụ của bạn vào cửa sổ bằng cách sử dụng trình xây dựng giao diện.
Đính kèm một lớp tùy chỉnh cho bạn NSHostingController
và tải chế độ xem SwiftUI của bạn vào đó.
Mã ví dụ dưới đây:
import Cocoa
import SwiftUI
class HostingController: NSHostingController<SwiftUIView> {
@objc required dynamic init?(coder: NSCoder) {
super.init(coder: coder, rootView: SwiftUIView())
}
}
Sử dụng phương pháp này cũng cung cấp cho bạn khả năng tùy chỉnh thanh công cụ.