我有一个带有简单 NavigationStack 的视图,代码如下:
import SwiftUI
struct Parcels: View {
@Binding var searchText : String
var body: some View {
NavigationStack{
List{
some code here...
}
.listStyle(.plain)
.navigationTitle("Parcels")
.navigationBarTitleDisplayMode(.automatic)
}
.searchable(text: $searchText, prompt: "Search")
}
}
一切正常,预览看起来也不错。 该视图嵌入到具有页面样式的TabView中,代码如下:
import SwiftUI
struct MainView: View {
@State private var selectedTab = 0
var body: some View {
TabView (selection: $selectedTab) {
//MARK: First View with code posted above
Parcels(searchText: $searchText)
.tabItem {
Label("Parcels", systemImage: "shippingbox.fill")
}.tag(0).sensoryFeedback(.success, trigger: selectedTab == 0)
//MARK: Second View
Settings()
.tabItem {
Label("Settings", systemImage: "gearshape.fill")
}.tag(1).sensoryFeedback(.success, trigger: selectedTab == 1)
}
.tabViewStyle(.page)
.indexViewStyle(.page(backgroundDisplayMode: .always))
}
}
问题在于名为“Parcels”的视图的 NavigationStack“.toolbar”修饰符在名为“MainView”的视图的预览中的外观:
为什么会这样呢? 为什么 NavigationStack 显示不正确? 此外,搜索栏未显示在 MainView.swift 文件中(它正确显示在 Parcels.swift 文件中)。 仅当在“.page”上设置 .tabViewStyle 时才会发生这种情况。
有什么建议吗? 谢谢。
更新: 如果我将“MainView.swift”文件的 TabView 嵌入到另一个 NavigationStack 中,NavigationStack 将正确显示。重点是标题始终显示为“内联”并且搜索栏始终不显示。
我找到了适合我的情况的解决方案。首先,创建 TabView,然后将每个子视图嵌入到导航堆栈中(请参阅示例代码):
@State private var selectedTab = 0
var body: some View {
TabView(selection: $selectedTab){
NavigationStack{
FirstView()
}.tag(0)
NavigationStack{
SecondView()
}.tag(1)
...
}
就像魅力一样!