Как добавить панель поиска в MenuBarExtra с помощью SwiftUI

macOS 13.0+, Apple представляет новый API под названием MenuBarExtra, который может добавлять строку меню в macOS. Но я не могу добавить в контент протокол с возможностью поиска, чтобы добавить представление поиска?

      @main
struct AppWithMenuBarExtra: App {
    @AppStorage("showMenuBarExtra") private var showMenuBarExtra = true

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        MenuBarExtra(
            "App Menu Bar Extra", systemImage: "star",
            isInserted: $showMenuBarExtra)
        {
            NavigationLink {
               Text("Search")
            }.searchable()
        }
    }
}

Я ожидаю, что панель поиска может отображаться в меню.

1 ответ

Я решил эту проблему, вот мое решение:

Мы не можем добавитьNavigationLinkи его протоколsearchableв сцену для добавления представления поиска, но мы можем добавитьTextFieldв качестве панели поиска вMenuBarExtraкогда мы устанавливаем модификатор.menuBarExtraStyleк.window:

      @main
struct AppWithMenuBarExtra: App {
    @AppStorage("showMenuBarExtra") private var showMenuBarExtra = true
    @State private var searchText: String
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        MenuBarExtra(
            "App Menu Bar Extra", systemImage: "star",
            isInserted: $showMenuBarExtra) {
            TextField("Input the search text",text: $searchText)
              .onSubmit {
            // do search action
            }
        }
        .menuBarExtraStyle(.window) // open item as popover window
    }
}
Другие вопросы по тегам