gpt4 book ai didi

cocoa - 如何将 SwiftUI 按钮放入 NSToolbar 中?

转载 作者:行者123 更新时间:2023-12-03 16:09:16 27 4
gpt4 key购买 nike

这就是如何使用附件 View Controller 将 SwiftUI 插入到 NSToolbar 中:

import SwiftUI
import PlaygroundSupport

var hostingView = NSHostingView(rootView:
ZStack {
Color.clear
HStack {
Text("Hey")
Text("SwiftUI")
}
}
.padding()
.edgesIgnoringSafeArea(.all)
)
hostingView.frame.size = hostingView.fittingSize

let titlebarAccessory = NSTitlebarAccessoryViewController()
titlebarAccessory.view = hostingView
titlebarAccessory.layoutAttribute = .trailing

let mask: NSWindow.StyleMask = [.titled, .closable, .miniaturizable, .resizable]
let window = NSWindow(
contentRect: .init(x: 0, y: 0, width: 480, height: 300),
styleMask: mask, backing: .buffered, defer: false)
window.center()
window.contentView = NSHostingView(rootView: Color(.windowBackgroundColor))
window.toolbar = .init()
window.titleVisibility = .hidden
window.addTitlebarAccessoryViewController(titlebarAccessory)

PlaygroundPage.current.liveView = window.contentView?.superview

上面的代码确实有效:

如果我们插入一个按钮:

HStack {
Text("Hey")
Button(action: {}) {
Text("SwiftUI")
}
}

它不会按预期工作:

有什么建议吗?

P。 S.这是一个可行的解决方案:

HStack {
Text("Hey")
.offset(x: 0, y: -1)
Button(action: {}) {
Text("SwiftUI")
.offset(x: 0, y: -7)
}
}
.font(.caption)

最佳答案

我最终处理它的方式(当用户使窗口全屏显示并且无论内容的高度*如何时也使其工作)如下。请注意,我在使用最新 Xcode 版本(显然,在 macOS Catalina 上)构建的 macOS 应用程序的 NSTitlebarAccessoryViewController 内的 NSHostingView 中使用工具栏 View 。

重要的事情:*您仍然需要为框架设置固定高度(但至少您不会依赖“变量”-7),并且仅在安全的情况下才向顶部偏移实际高度的一半区域顶部插图(在全屏模式下,显然不是),因此 GeometryReader 是必须的:

struct Toolbar : View {
var body: some View {
GeometryReader { geometry in
VStack {
Text("1st row")
Text("2nd row")
}
.offset(y: geometry.safeAreaInsets.top > 0 ? -geometry.size.height / 2 : 0)
}
.frame(height: 42)
}
}

以及创建窗口的位置:

let toolbar = NSHostingView(rootView: Toolbar())
toolbar.frame.size = toolbar.fittingSize
let toolbarController = NSTitlebarAccessoryViewController()
toolbarController.view = toolbar
window.addTitlebarAccessoryViewController(toolbarController)

关于cocoa - 如何将 SwiftUI 按钮放入 NSToolbar 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58518610/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com