我在导航 View 中有一个选项卡 View 。启动时,ContentView() 设置选项卡 View ,然后设置 StartUpView()。
当 StartUpView() 被单独调用时,它包含 View 顶部的蓝色保留 block 以及下面的一个小块,其中包含两个按钮(一个用于菜单,一个用于下面的 future 逻辑的保存按钮)。
当我从 ContentView() 运行 StartupView() 时,蓝色 block 的大小 (33 毫米) 是 StartupView() 直接调用自身时的大小 (15 毫米) 的两倍多。
在 StartUpView() 中,我必须将 GeometryReader 百分比从 60% 增加到 80% 才能显示这两个按钮。有什么办法可以保持蓝色 block 原来的高度吗?
我的目标--这是单独运行 StartupView() 时的 View /image/8kCvM.png
这就是从选项卡 View 逻辑调用时 StartupView() 的样子。 /image/bve7p.png
struct ContentView: View {
@State private var selectedTab: Tabs = .home
var body: some View {
NavigationView {
TabView (selection: $selectedTab) {
StartUpView()
.tabItem {
Label("Tab A", systemImage: "a.circle.fill")
}.tag(Tabs.taba)
TabBView()
.tabItem {
Label("Tab B", systemImage: "b.circle.fill")
}.tag(Tabs.tabb)
TabCView()
.tabItem {
Label("Tab C", systemImage: "c.circle.fill")
}.tag(Tabs.tabc)
TabDView()
.tabItem {
Label("Tab D", systemImage: "d.circle.fill")
}.tag(Tabs.tabd)
TabEView()
.tabItem {
Label("Tab E", systemImage: "e.circle.fill")
}.tag(Tabs.tabe)
}
}.navigationViewStyle(StackNavigationViewStyle())
}
}
struct StartupView: View {
var body: some View {
NavigationView {
GeometryReader { g in
ZStack (alignment: .top) {
Color.blue
.frame(height: (g.safeAreaInsets.top) * 0.6, alignment: .top)
.ignoresSafeArea()
.navigationTitle("Title")
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
NavigationLink (destination: SettingsView()) {
Image(systemName: "line.3.horizontal")
.resizable()
.foregroundColor(.white)
.frame(width: 16, height: 16)
}
}
ToolbarItem(placement: .navigationBarTrailing) {
Button(action: {
print("save tapped!")
}){
Text("Save")
.foregroundColor(.white)
}
}
}
}
}
}
}
}
最佳答案
您不需要在 StartUpView
中使用第二个 NavigationView
- 层次结构中应该只有一个。这个问题是由于第二个导航 View 导航栏造成的。
所以固定部分是
struct StartUpView: View {
var body: some View {
// NavigationView { // << removed !!
GeometryReader { g in
// ... other code
}
}
}
使用 Xcode 13.4/iOS 15.5 进行测试
关于swiftui - TabView 干扰启动屏幕标题高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72722392/