【问题标题】:Search Bar is briefly visible when navigating with NavigationStack (SwiftUI)使用 NavigationStack (SwiftUI) 导航时,搜索栏会短暂可见
【发布时间】:2022-11-29 02:59:15
【问题描述】:

我在使用新 NavigationStack 导航到的列表中有一个 .searchable 修饰符。但是,当视图加载时,搜索框会短暂可见,这看起来很奇怪。我是在错误地使用导航堆栈还是这是某种错误?

这是一个动画 gif,其中放慢了动画速度,因此很容易在列表 1 中看到它。

这是复制它的代码。

import SwiftUI

struct ContentView: View {
    var body: some View {
        TabView {
            View1()
                .tabItem {
                    Label("View 1", systemImage: "1.circle")
                }
            
            View2()
                .tabItem {
                    Label("View 2", systemImage: "2.circle")
                }
        }
    }
}

struct View1: View {
    enum Page {
        case listView1
        case listView2
    }
    
    var body: some View {
        NavigationStack {
            List {
                NavigationLink(value: Page.listView1) {
                    Text("List View 1")
                }
                
                NavigationLink(value: Page.listView1) {
                    Text("List View 2")
                }
            }
            .navigationDestination(for: Page.self) { page in
                switch page {
                case .listView1:
                    ListView1()
                case .listView2:
                    ListView2()
                }
            }
            .navigationTitle("View1")
        }
    }
}


struct ListView1: View {
    @State private var search: String = ""
    
    var body: some View {
        List {
            ForEach(1..<20) { i in
                Text("List \(i)")
            }
        }
        .searchable(text: $search)
        .navigationTitle("List View 1")
    }
}

struct ListView2: View {
    var body: some View {
        List {
            ForEach(1..<20) { i in
                Text("List \(i)")
            }
        }
        .navigationTitle("List View 2")
    }
}

struct View2: View {
    var body: some View {
        Text("View 2")
    }
}

【问题讨论】:

  • 我不确定它是否会解决问题,但在navigationDestination 内设置一个开关是个坏主意。最好为每种值设置多个 navigationDestinations。
  • @malhal Untofuntanetly,它没有解决问题,但我想知道,对于上述情况,我应该如何使用 navigationDestionation 来显示不同的视图?

标签: swiftui swiftui-navigationstack .searchable


【解决方案1】:

我相信这是 NavigationStack 错误,我也可以重现它。作为解决方法,您可以切换到旧版 NavigationView

NavigationView {
    List {
        NavigationLink(destination: { ListView1() }) {
            Text("List View 1")
        }
        
        NavigationLink(destination: { ListView2() }) {
            Text("List View 2")
        }
    }
    .navigationTitle("View1")
}

它工作正常

【讨论】:

    猜你喜欢
    • 2022-09-29
    • 1970-01-01
    • 2015-11-21
    • 2022-08-04
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多