0

.navigationTitle一些观点似乎有一些问题。在某些观点上(并且仅在某些时候),不会像预期的那样.navigationTitle.large变为。.inline相反,标题在向上滚动时保持原位,并且导航栏完全不可见(如下面的视频中所述)。这一切都是每次都可以重现的。

可重现.navigationTitle错误的视频

我没有在堆栈溢出或 Apple 开发者论坛上找到任何遇到此问题的人。有些人产生了与此类似的结果,但这些都是通过删除一些样式化代码来修复的.navigationbar,我没有在我的代码中的任何地方对其进行任何修改。

以下是我的一些代码片段:

import SwiftUI
struct WelcomeUI: View { 
   var body: some View {
      NavigationView {
         VStack {
            //NavigationLink(destination: SignupUI(), label: {
               //Text("Sign Up")
            //}
            NavigationLink(destination: LoginUI(), label: {
               Text("Log In")
            })
         }
      }
   }
}


struct LoginUI: View {
   var body: some View {
      VStack {
         
         NavigationLink(destination: MainUI(), label: { Text("Log In") })
         //Button(action: { ... }
      }
   .navigationBarHidden(false)
   }
}


struct MainUI: View {
    @State var selectedTab: Views = .add
    var body: some View {
        
        TabView(selection: $selectedTab) {
            SpendingView()
                .tabItem {
                    Image(systemName: "bag.circle")
                    Text("Spending")
                }.tag(Views.spending)
            Text("Adding View")
                .tabItem {
                    Image(systemName: "plus")
                    Text("Add")
                }.tag(Views.add)
            Text("Edit View")
                .tabItem {
                    Image(systemName: "pencil")
                    Text("Edit")
                }.tag(Views.edit)
            SettingsView()
                .tabItem {
                    Image(systemName: "gear")
                    Text("Settings")
                }.tag(Views.settings)
        }
        .navigationBarTitle(Text(selectedTab.rawValue))
        .navigationBarBackButtonHidden(true)
    }
}


enum Views: String {
    case spending = "Spending"
    case add = "Add"
    case edit = "Edit"
    case settings = "Settings"
}


struct SettingsView: View {
    var body: some View {
        VStack{
            ZStack {
                Form {
                    Section(header: Text("Section Header")) {
                        NavigationLink(destination: WelcomeUI()) {
                            Text("Setting Option")
                        }
                    }
                    Section {
                        //Button("Log Out") {
                        //self.logout()
                        //}
                        Text("Log Out")
                    }
                }
                Button("say-high", action: {print("Hi")})
            }
        }
    }
}

struct SpendingView: View {
    var body: some View {
        ScrollView{
            Text("SpendingView")
            NavigationLink("subSpending", destination: SubSpendingView())
        }.padding()
    }
}
struct SubSpendingView: View {
    var body: some View {
        ScrollView{
            Text("SubSpendingView")
            
        }.navigationBarTitle("SubSpending")
    }
}

它几乎看起来像是 SwiftUI 本身的一个错误,因为关闭控制中心的事实使它可以工作,但没有动画(如视频中所示)。此外,更改首先选择哪个视图@State var selectedTab: Views似乎让所选视图按预期工作,但让其余选项卡混乱。

当我在我的 iPad 上构建和运行该应用程序时,它的行为符合预期,没有错误,只有在我的 iPhone 和 Mac 上的 iOS 模拟器上运行时,它才会这样做,有什么办法可以解决这个问题?

4

2 回答 2

1

为此,ScrollView 必须是 NavigationView 的直接子级才能完美运行。我在导航时遇到了类似的问题,想要关闭 TabView,但 SwiftUI 不会让这种情况发生。每个选项卡都需要是 NavigationView,如果您想要的话,您需要创造性地关闭 TabView。

TabView {
    NavigationView {
        ScrollView {
            // your view here
        }
    }.tabItem {
        // tab label
    }
    
    // etc
}

本质上,导航视图需要是选项卡视图的子视图(在括号中),滚动视图需要是导航视图的直接子视图。

于 2020-12-16T03:02:32.767 回答
0

在 TabView 的子视图上使用navigationBarTitle("Title")and ,而不是在其自身上。navigationBarBackButtonHidden(true)

struct ContentView: View {
    var body: some View {
        NavigationView {
            VStack {
                
            }
            .navigationBarTitle("Title")
            .navigationBarBackButtonHidden(true)
        }
    }
}
于 2020-12-16T18:41:50.150 回答