One Logo Pool Ball
SwiftUI · IOS API REFERENCE

Menu

struct · iOS 14.0+ · SDK 27.1

nonisolated struct Menu<Label, Content> where Label : View, Content : View

A control for presenting a menu of actions. The following example presents a menu of three buttons and a submenu, which contains three buttons of its own. Menu("Actions") { Button("Duplicate", action: duplicate) Button("Rename", action: rename) Button("Delete…", action: delete) Menu("Copy") { Button("Copy", action: copy) Button("Copy Formatted", action: copyFormatted) Button("Copy Library Path", action: copyPath) } } You can create the menu's title with a ``LocalizedStringKey``, as seen in the previous example, or with a content builder that creates multiple views, such as an image and a text view: Menu { Button("Open in Preview", action: openInPreview) Button("Save as PDF", action: saveAsPDF) } label: { Label("PDF", systemImage: "doc.fill") } To support subtitles on menu items, initialize your `Button` with a view builder that creates multiple `Text` views where the first text represents the title and the second text represents the subtitle. The same approach applies to other controls such as `Toggle`: Menu { Button(action: openInPreview) { Text("Open in Preview") Text("View the document in Preview") } Button(action: saveAsPDF) { Text("Save as PDF") Text("Export the document as a PDF file") } } label: { Label("PDF", systemImage: "doc.fill") } > Note: This behavior does not apply to buttons outside of a menu's content. ### Primary action Menus can be created with a custom primary action. The primary action will be performed when the user taps or clicks on the body of the control, and the menu presentation will happen on a secondary gesture, such as on long press or on click of the menu indicator. The following example creates a menu that adds bookmarks, with advanced options that are presented in a menu. Menu { Button(action: addCurrentTabToReadingList) { Label("Add to Reading List", systemImage: "eyeglasses") } Button(action: bookmarkAll) { Label("Add Bookmarks for All Tabs", systemImage: "book") } Button(action: show) { Label("Show All Bookmarks", systemImage: "books.vertical") } } label: { Label("Add Bookmark", systemImage: "book") } primaryAction: { addBookmark() } ### Styling menus Use the ``View/menuStyle(_:)`` modifier to change the style of all menus in a view. The following example shows how to apply a custom style: Menu("Editing") { Button("Set In Point", action: setInPoint) Button("Set Out Point", action: setOutPoint) } .menuStyle(EditingControlsMenuStyle())

Members (0)

This type has no directly callable members in this snapshot. See the framework’s skipped declarations for unsupported APIs.

Skipped declarations

19 declarations were excluded from these bindings. Each reason comes from the generator or the iOS SDK compiler.

Menu.body

This protocol needs associated types that cannot yet cross the bridge.

Menu.init(content:label:)

callback cannot propagate synchronous failure

Menu.init(_:content:)

callback cannot propagate synchronous failure

Menu.init(_:content:)

callback cannot propagate synchronous failure

Menu.init(_:content:)

callback cannot propagate synchronous failure

Menu.init(content:label:primaryAction:)

callback cannot propagate synchronous failure

Menu.init(_:content:primaryAction:)

callback cannot propagate synchronous failure

Menu.init(_:content:primaryAction:)

callback cannot propagate synchronous failure

Menu.init(_:content:primaryAction:)

callback cannot propagate synchronous failure

Menu.init(_:systemImage:content:)

callback cannot propagate synchronous failure

Menu.init(_:systemImage:content:)

callback cannot propagate synchronous failure

Menu.init(_:systemImage:content:)

callback cannot propagate synchronous failure

Menu.init(_:systemImage:content:primaryAction:)

callback cannot propagate synchronous failure

Menu.init(_:systemImage:content:primaryAction:)

callback cannot propagate synchronous failure

Menu.init(_:image:content:)

callback cannot propagate synchronous failure

Menu.init(_:image:content:)

callback cannot propagate synchronous failure

Menu.init(_:image:content:)

callback cannot propagate synchronous failure

Menu.init(_:image:content:primaryAction:)

callback cannot propagate synchronous failure

Menu.init(_:image:content:primaryAction:)

callback cannot propagate synchronous failure

All SwiftUI types →