Issue #719
From SwiftUI 2 for macOS 11.0, we have access to Menu
for creating menu and submenu. Usually we use Button
for interactive menu items and Text
for disabled menu items.
The easy way to customize menu with image is to call Menu
with content
and label
. Pay attention to how we use Button
and Label
inside Content
to create interactive menu items
Menu(
content: {
ForEach(collections) { collection in
Button(action: {) {
Label(collection.name, systemImage: SFSymbol.star.rawValue)
}
}
},
label: {
Image(systemName: SFSymbol.bookmarkFill.rawValue)
Text("Add to collection")
}
)
We can also use Image
and Text
separately. By default SwiftUI wraps these inside HStack
automatically for us. For now, color has no effect in Menu
, but it works on Text
Image(systemName: SFSymbol.bookmarkFill.rawValue)
.foregroundColor(Color.red)
Text(collection.name)
.foregroundColor(Color.green)
One way to mitigate this is to use Text with icon font. Here I use my FontAwesomeSwiftUI
There’s a problem that only the first Text
is shown
Text(collection.icon)
.font(.awesome(style: .solid, size: 18))
.foregroundColor(Color.red)
Text(collection.name)
The solution is to concatenate Text
. In SwiftUI, Text
has +
operator that allows us to make cool attributed texts
Text(collection.icon)
.font(.awesome(style: .solid, size: 18))
.foregroundColor(Color.red)
+ Text(collection.name)