AppKitを使用すると、NSMenuItem
sをNSMenu
に追加できます。 SwiftUIのNSMenuに似たもの、つまり MenuButton
があることがわかりました。しかし、それがどのように機能するかについてのドキュメントは見つかりません。
私は以下を試しました:
_MenuButton("+") {
Button("New contact") { print("Create new contact") }
Button("New group") { print("Create new group") }
}
_
そして、それは私にこれを与えます
システム設定で「透明度を下げる」を有効にすると、ほとんど問題ないように見えますがしかし
また、.background()
修飾子を使用して手動で背景色を変更しようとしましたが、メニュー項目の全幅には影響しません。
_MenuButton("+") {
Button("New contact") { print("Create new contact") }
.background(Color.accentColor)
Button("New group") { print("Create new group") }
}
_
これは、Button
sをMenuButton
の内部に配置しているときに、おそらく他のSwiftUI要素を想定しているためと考えられます。以下のような通常の外観のmacOSメニューを作成するには、MenuButtons内にどの要素を配置する必要がありますか?
ビッグサーでも試してみました。背景は正しくレンダリングされますが、Big Surではテキストの色が乱れます。 ????
ButtonStyle
を構成し、MenuButton
ジェネリック構造に適用することで、これに対する部分的な解決策を見つけたと思います。ただし、_.foregroundColor
_の条件付き変更は、個人のButton()
のText()
に継承されないことに注意してください。また、色が正しくありません。
おそらく誰かがこれを改善したいと思っているでしょう。
_struct DetectHover: ButtonStyle {
@State private var hovering: Bool = false
public func makeBody(configuration: DetectHover.Configuration) -> some View {
configuration.label
.foregroundColor(self.hovering ? Color.white : Color.primary)
.background(self.hovering ? Color.blue : Color.clear)
.onHover { hover in
self.hovering = hover
}
}
}
_
_MenuButton(label: Image(nsImage: NSImage(named: NSImage.actionTemplateName)!)) {
// Buttons
}.buttonStyle(DetectHover())
_