SwiftUI NSTitlebarAccessoryViewController

Tay*_*lor 5 macos swiftui

我想使用 SwiftUI 应用程序生命周期,但我的应用程序用于NSTitlebarAccessoryViewController在工具栏下方显示工具选项栏:

工具栏

具体来说,我这样做:

        let toolSettingsView = NSHostingView(rootView: ToolAccessoryView(model: model))
        let vc = NSTitlebarAccessoryViewController()
        vc.view = toolSettingsView
        vc.fullScreenMinHeight = accessoryHeight // Ensure tool settings are visible in full screen.
        toolSettingsView.frame.size = toolSettingsView.fittingSize
        window?.addTitlebarAccessoryViewController(vc)
Run Code Online (Sandbox Code Playgroud)

有没有一种(实用的)方法可以使用纯 SwiftUI 模仿控件外观(滑块等)?当使用 SwiftUI 视图时,我得到了这个:

在此处输入图片说明

代码如下所示:

struct MainView: View {
    
    var model: DataModel
    var undoManager: UndoManager
    
    var body: some View {
        VStack {
            ToolAccessoryView(model: model)
            SculptingView(model: model, undoManager: undoManager)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Tay*_*lor 0

从 macOS 13 开始,这是通过使用自定义工具栏放置标识符来实现的,如下所示:

extension ToolbarItemPlacement {
    static let toolOptionsBar = ToolbarItemPlacement(id: "com.companyname.toolOptions")
}
Run Code Online (Sandbox Code Playgroud)

然后指定位置.toolbar

ToolbarItem(placement: .toolOptionsBar) {
    ToolAccessoryView()
}
Run Code Online (Sandbox Code Playgroud)

在我的例子中看起来像这样:

工具栏附件视图

滑块上的颜色有点奇怪,这可能是他们的错误。

另请参阅https://developer.apple.com/documentation/swiftui/toolbarplacement/init(id:)其中有一些示例代码。