【发布时间】:2020-04-09 04:53:32
【问题描述】:
详细here(关于 iOS 主题),以下代码可用于使 SwiftUI View 自行关闭:
@Environment(\.presentationMode) var presentationMode
// ...
presentationMode.wrappedValue.dismiss()
但是,此方法不适用于本机(非 Catalyst)macOS NavigationView 设置(如下所示),其中所选视图显示在 List 旁边。
理想情况下,当这些子视图中的任何一个使用上述内容时,列表将返回到没有选择任何内容(如首次启动时);但是,dismiss 函数似乎什么也没做:视图保持不变。
这是一个错误,还是预期的 macOS 行为?
还有其他方法可以代替吗?
struct HelpView: View {
var body: some View {
NavigationView {
List {
NavigationLink(destination:
AboutAppView()
) {
Text("About this App")
}
NavigationLink(destination:
Text("Here’s a User Guide")
) {
Text("User Guide")
}
}
}
}
}
struct AboutAppView: View {
@Environment(\.presentationMode) var presentationMode
public var body: some View {
Button(action: {
self.dismissSelf()
}) {
Text("Dismiss Me!")
}
}
private func dismissSelf() {
presentationMode.wrappedValue.dismiss()
}
}
仅供参考:真正的意图是针对不太直接的场景(例如在完成任务时从Alert 触发);这里的按钮设置只是为了简单。
【问题讨论】:
-
为了以防万一,推荐的主题是针对 iOS 的。
-
是的,注意到了,谢谢。希望大多数 SwiftUI 功能都适用于这两种情况,但这似乎不是其中一种情况。我想我看到 cmets 建议它也不适用于 iPadOS 拆分视图,但我不确定第一手。
-
我现在也在问题中明确说明了操作系统差异。
-
@TheNeil 任何想法,同时如何在 MacOS 中解决这个问题?
-
嗨@mica。很不幸的是,不行。还没有看到任何答案进来这个。老实说,我主要是通过使用更多条件视图并远离导航视图来解决它,但这远非理想。
标签: swift macos navigation swiftui