JSON 데이터를 검색하고 검색 된 항목 목록을 FileBrowser 유형보기에 표시하는 기능이 포함 된 앱을 설계하고 있습니다. 이보기에서 사용자는 폴더를 클릭하여 파일 트리를 자세히 살펴 보거나 파일을 클릭하여 해당 파일에 대한 일부 메타 데이터를 볼 수 있어야합니다.
이것이 작동하는 동안 파일이나 폴더를 클릭 한 다음 되돌아 가서 다시 클릭하면 NavigationLink가 트리거되지 않고 다른 NavigationLink를 클릭 할 때까지보기에 고정되어 있음을 관찰했습니다.
이 문제를 보여주는 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)
}
}
}
}
다음과 같이 navigationLinks를 사용하여 볼 수 있습니다.
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가이 문제를 일으키는 것으로 생각하지 않습니까? 이 버그는 앱의 다른 navigationLink에서도 발생하지만 FileBrowser보기에서 가장 쉽게 설명 할 수 있습니다.
이것은 SwiftUI의 버그일까요? 누구 든지이 문제를 해결할 수있는 방법을 알고 있습니까? 그렇지 않은 경우, 내가 뭘 잘못하고 있습니까?
NavigationLink
내부에 FileView
싸여있다 NavigationView
따라서 NavigationLink
내부에 싸여있다NavigationView
cellArray
했습니까?
NavigationLink
내부 를 감싸고 에서NavigationView
제거 해서는 안 됩니까? 나는 그 주위에서 그렇게하는 몇 가지 예를 보았습니다.NavigationView
FileView