在 SwiftUI 中打开菜单时(及此后)触发时,工作表不会出现

问题描述 投票:0回答:0

我似乎在 SwiftUI 中错误地使用了(上下文)菜单(或者存在严重的错误):

当菜单打开并且用户点击后台中应该打开工作表的另一个按钮 (⛭) 时,菜单会自动关闭,但不会显示工作表。

更糟糕的是:在那之后,我可以根据需要多次点击按钮,但仍然没有任何反应。相反,以下警告会打印到日志中(仅第一次):

[演示]尝试演示 <TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView: 0x105818200> 上 <TtGC7SwiftUI19UIHostingControllerGVS_15ModifiedContentVS_7AnyViewVS_12RootModifier_: 0x10601e000>(来自 <TtGC7SwiftUI19UIHostingControllerGVS_15ModifiedContentVS_7AnyViewVS_12RootModifier_: 0x10601e000>) 已经呈现 <_UIContextMenuActionsOnlyViewController: 0x107308e30>.

显然,SwiftUI 将菜单呈现为引擎盖下的模态视图以及设置视图,但 UIKit 无法同时呈现两个模态。虽然了解这个问题,但我不确定如何解决它:

  1. 一种方法是完全禁用后台的用户交互(即不属于菜单的所有内容)。但我无法找到可靠的方法来做到这一点,甚至无法检测菜单何时打开。 这是我找到的解决方案的最佳尝试。还有更好的吗

  2. 另一种方法是在打开工作表之前先关闭菜单。但我又不知道该怎么做。有什么想法吗?

这是复制该行为的最小代码示例:

struct ContentView: View { @State private var displaySettings: Bool = false var body: some View { Button { displaySettings = true } label: { Image(systemName: "gearshape.fill") .resizable() .aspectRatio(contentMode: .fit) .frame(width: 50) } .toolbar { ToolbarItem(placement: .bottomBar) { Menu { Button(action: {}) { Label("Reset", systemImage: "arrow.counterclockwise") } } label: { Image(systemName: "ellipsis.circle") } } } .sheet(isPresented: $displaySettings) { Text("Settings") } } }
⚠️ 请注意,该问题仅发生在真实设备上。模拟器没有这个问题并按预期显示工作表。

ios swiftui menu toolbar swiftui-sheet
© www.soinside.com 2019 - 2024. All rights reserved.