我正在设计一个包含检索JSON数据和在文件浏览器类型视图中显示检索到的项目列表功能的应用程序。在此视图中,用户应该能够点击文件夹以深入了解文件树,或者点击文件以查看有关该文件的一些元数据。
我发现,虽然这个功能正在工作,但当我单击文件或文件夹,然后返回并再次单击它时,导航链接不会触发,直到我单击其他导航链接之前,我就一直停留在该视图上。
以下是展示此问题的GIF。
如图所示,当我单击BlahBlah时,我正在激活NavigationLink并跳转到BlahBlah,然后当我导航回来并尝试重新导航到BlahBlah时,它变成灰色,注册我单击了它...但是从未将我传送到那里。单击TestFile可以解决此问题,并允许我导航回BlahBlah。
列表项由以下结构体创建:
private struct FileCell{
var FileName: String
var FileType: String
var FileID: String = ""
var isContainer: Bool
}
private struct constructedCell: View{
var FileType: String
var FileName: String
var FileID: String
var body: some View {
return
HStack{
VStack(alignment: .center){
Image(systemName: getImage(FileType: FileType)).font(.title).frame(width: 50)
}
Divider()
VStack(alignment: .leading){
Text(FileName).font(.headline)
.multilineTextAlignment(.leading)
Text(FileID)
.font(.caption)
.multilineTextAlignment(.leading)
}
}
}
}
并通过以下导航链接调用视图
List(cellArray, id: \.FileID) { cell in
if (cell.isContainer) {
NavigationLink(destination: FileView(path: "/\(cell.FileID)", displaysLogin: self.$displaysLogin).navigationBarTitle(cell.FileName)){
constructedCell(FileType: cell.FileType, FileName: cell.FileName, FileID: cell.FileID)
}
} else {
NavigationLink(destination: DetailView(FileID: cell.FileID).navigationBarTitle(cell.FileName)){
constructedCell(FileType: cell.FileType, FileName: cell.FileName, FileID: cell.FileID)
}
}
}
我的NavigationView在上面的视图中初始化(应用程序有一个选项卡视图),代码如下:
TabView(selection: $selection){
NavigationView{
FileView(displaysLogin: self.$displaysLogin)
.navigationBarTitle("Home", displayMode: .inline)
.background(NavigationConfigurator { nc in
nc.navigationBar.barTintColor = UIColor.white
nc.navigationBar.titleTextAttributes = [.foregroundColor : UIColor.black]
})
}
.font(.title)
.tabItem {
VStack {
Image(systemName: "folder.fill")
Text("Files")
}
}
.tag(0)
}
NavigationConfigurator是我用来处理navigationBar颜色的结构体。它设置如下:
struct NavigationConfigurator: UIViewControllerRepresentable {
var configure: (UINavigationController) -> Void = { _ in }
func makeUIViewController(context: UIViewControllerRepresentableContext<NavigationConfigurator>) -> UIViewController {
UIViewController()
}
func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext<NavigationConfigurator>) {
if let nc = uiViewController.navigationController {
self.configure(nc)
}
}
}
我不认为我的NavigationConfigurator导致了这个问题?在应用程序中,其他navigationLinks也会出现这个bug,但在FileBrowser视图中展示它是最容易的。
这可能是SwiftUI的一个bug吗?如果是,有谁知道解决方法吗?如果不是,那我做错了什么?
NavigationLink
位于FileView
内部,而FileView
又被包装在NavigationView
中,因此NavigationLink
被包装在NavigationView
内部。 - VapidantcellArray
的? - E.Coms