【发布时间】:2022-03-02 08:23:55
【问题描述】:
我有一个 NavigationView/List 组合,可以进行编程选择。基本概念与此处描述的类似:https://www.hackingwithswift.com/quick-start/swiftui/how-to-use-programmatic-navigation-in-swiftui
有这么多东西,这在 iOS 上运行良好,但在 macOS 上存在一个问题:NavigationView 中的 EmptyView 在选择项目后立即变得可见:
有人知道如何删除这个不需要的 EmptyView() 吗?
这是一个演示项目:
struct ContentView: View {
@ObservedObject private var state = State()
var body: some View {
NavigationView {
VStack {
List(state.items, id: \.self, selection: $state.selected) { item in
Text(item)
.buttonStyle(.borderless)
}
// navigation to the detail view if an item is selected
if let selected = state.selected {
NavigationLink(
destination: Text(selected),
isActive: state.hasSelectionBinding
) {
EmptyView()
}
}
}
}
}
}
class State: ObservableObject {
@Published var items: [String] = ["Item 1", "Item 2", "Item 3"]
@Published var selected: String?
var hasSelectionBinding: Binding<Bool> {
Binding(
get: { self.selected != nil },
set: {
if $0 == false {
self.selected = nil
}
}
)
}
}
编辑 1:我尝试将 NavigationLink 放入堆栈上的背景修饰符,但现在“空视图”出现在“项目 3”旁边:
var body: some View {
NavigationView {
VStack {
List(state.items, id: \.self, selection: $state.selected) { item in
Text(item)
.buttonStyle(.borderless)
}
}
.background(Group {
// navigation to the detail view if an item is selected
if let selected = state.selected {
NavigationLink(
destination: Text(selected),
isActive: state.hasSelectionBinding
) {
EmptyView()
}
}
})
}
}
【问题讨论】:
-
放到
.background -
@loremipsum:我刚刚尝试将带有 NavigationLink 的块放入 VStack 的背景中,但现在“EmptyView”出现在列表的最后一项旁边。
-
向您的问题添加一个编辑部分,显示您刚刚尝试的内容。
-
@Yrb:刚刚更新了一个编辑部分。
-
我认为这是一个错误。
init(destinationName:isActive:label:)初始化程序显示幻影图像。NavigationLink(_:tag:selection:destination:)没有。