iosswiftswiftuiswiftui-menu

Cannot set color of Button's Label inside Menu in SwiftUI


If I create a Menu in SwiftUI (iOS), I cannot set the color of the Buttons inside, e.g.:

Menu("Actions") {
    Button(action: { }) {
        Label("Whatever", systemImage: "pencil")
             .background(Color.red)  // does not work
    }
    .background(Color.red)           // does not work either
    .buttonStyle(RedButtonStyle())   // does not work either
}

struct RedButtonStyle: ButtonStyle {
    func makeBody(configuration: Configuration) -> some View {
        configuration.label.foregroundColor(Color.red)
    }
}

If instead of Label, I use Text, or Image (I am aware of this), it doesn't work either.

Is there any way to do it?

P.S.: there is another related SO question, but it is very generic and wider in scope.


Solution

  • This is now possible in iOS 15 by setting a Button's role. Documentation

    Example:

    Menu("Actions") {
        Button(role: .destructive, action: { }) {
            Label("Whatever", systemImage: "pencil")
        }
    }
    

    Result:

    Result