第二视图中的 NavigationTitle 未出现
NavigationTitle in second view not appearing
我是 IOS-app 开发的新手。我创建了(虽然是在指南的帮助下)一个功能齐全的登录页面。
只要完成用户身份验证,用户就会被转发到 HomepageView()
。
但是,我了解到在第二个视图中同时创建 NavigationView
是不好的做法。 (因为这样标题就被压低了很多)。
但是,如果我在第二个视图中不包含 NavigationView
,则标题根本不会显示。
我将在下面包含我的两个观点的代码
视图 1
var body: some View {
NavigationView{
ScrollView{
// LINK TO GO TO HOMESCREEN (Activated once login is succesfull)
NavigationLink(destination: HomepageView(uid: self.uid), isActive: $moveToHomeView, label: {
EmptyView()
})
VStack(spacing: 16){
Picker(selection: $isLoginMode, label: Text("Picker here")){
Text("Sign In")
// this .tag changes isLoginMode to true
.tag(true)
Text("Create Account")
// this .tag changes isLoginMode to false
.tag(false)
}
.pickerStyle(SegmentedPickerStyle())
if !isLoginMode {
Button{
// Action
shouldShowImagePicker.toggle()
}label:{
VStack{
// Selected image
if let image = self.image {
Image(uiImage: image)
.resizable()
.scaledToFill()
.frame(width: 128, height: 128)
.cornerRadius(64)
}else{
// Standard icon
Image(systemName: "person.fill")
.font(.system(size: 64))
.padding()
}
}
.overlay(RoundedRectangle(cornerRadius: 64)
.stroke(lineWidth: 3))
}
}
// In a Group you can put multiple items and style them the same way.
Group{
TextField("Email", text: $email)
.keyboardType(.emailAddress)
.autocapitalization(.none)
SecureField("Password", text: $password)
}
.padding(12)
.background(Color.white)
Button{
// Btn action here
handleAction()
} label: {
HStack{
Spacer()
Text(isLoginMode ? "Sign In" : "Create Account")
.foregroundColor(.white)
.padding(.vertical, 10)
Spacer()
}.background(Color.blue)
}
Text(self.loginStatusMessage)
.foregroundColor(.red)
}
.padding()
}
.navigationTitle(isLoginMode ? "Sign In" : "Create Account")
.background(Color(.init(white: 0, alpha: 0.05))
.ignoresSafeArea())
}
// FULL SCREEN COVER FOR IMAGE PICKER
.fullScreenCover(isPresented: $shouldShowImagePicker, onDismiss: nil){
ImagePicker(image: $image)
}
}
此代码创建以下内容:
然后当我创建第二个视图时(用户登录后将转到的视图)看起来像这样:
视图 2:(单独文件)
struct HomepageView: View {
var uid: String
var body: some View {
VStack {
Text("Hey, \(uid)")
}
.navigationTitle("Why does this not work?")
}}
此代码创建以下内容:
为什么视图 2 不显示 .navigationTitle
?
我已经坚持了很长时间了。非常感谢任何帮助!
谢谢你,祝你有愉快的一天!
NavigationView 未显示在预览中,因为您的第二个视图没有。没关系。就像你提到的,你不想在这里添加一个。
当您 运行 实际应用时,如果之前的视图有 NavigationView,您的第二个视图也会有。
我是 IOS-app 开发的新手。我创建了(虽然是在指南的帮助下)一个功能齐全的登录页面。
只要完成用户身份验证,用户就会被转发到 HomepageView()
。
但是,我了解到在第二个视图中同时创建 NavigationView
是不好的做法。 (因为这样标题就被压低了很多)。
但是,如果我在第二个视图中不包含 NavigationView
,则标题根本不会显示。
我将在下面包含我的两个观点的代码
视图 1
var body: some View {
NavigationView{
ScrollView{
// LINK TO GO TO HOMESCREEN (Activated once login is succesfull)
NavigationLink(destination: HomepageView(uid: self.uid), isActive: $moveToHomeView, label: {
EmptyView()
})
VStack(spacing: 16){
Picker(selection: $isLoginMode, label: Text("Picker here")){
Text("Sign In")
// this .tag changes isLoginMode to true
.tag(true)
Text("Create Account")
// this .tag changes isLoginMode to false
.tag(false)
}
.pickerStyle(SegmentedPickerStyle())
if !isLoginMode {
Button{
// Action
shouldShowImagePicker.toggle()
}label:{
VStack{
// Selected image
if let image = self.image {
Image(uiImage: image)
.resizable()
.scaledToFill()
.frame(width: 128, height: 128)
.cornerRadius(64)
}else{
// Standard icon
Image(systemName: "person.fill")
.font(.system(size: 64))
.padding()
}
}
.overlay(RoundedRectangle(cornerRadius: 64)
.stroke(lineWidth: 3))
}
}
// In a Group you can put multiple items and style them the same way.
Group{
TextField("Email", text: $email)
.keyboardType(.emailAddress)
.autocapitalization(.none)
SecureField("Password", text: $password)
}
.padding(12)
.background(Color.white)
Button{
// Btn action here
handleAction()
} label: {
HStack{
Spacer()
Text(isLoginMode ? "Sign In" : "Create Account")
.foregroundColor(.white)
.padding(.vertical, 10)
Spacer()
}.background(Color.blue)
}
Text(self.loginStatusMessage)
.foregroundColor(.red)
}
.padding()
}
.navigationTitle(isLoginMode ? "Sign In" : "Create Account")
.background(Color(.init(white: 0, alpha: 0.05))
.ignoresSafeArea())
}
// FULL SCREEN COVER FOR IMAGE PICKER
.fullScreenCover(isPresented: $shouldShowImagePicker, onDismiss: nil){
ImagePicker(image: $image)
}
}
此代码创建以下内容:
然后当我创建第二个视图时(用户登录后将转到的视图)看起来像这样:
视图 2:(单独文件)
struct HomepageView: View {
var uid: String
var body: some View {
VStack {
Text("Hey, \(uid)")
}
.navigationTitle("Why does this not work?")
}}
此代码创建以下内容:
为什么视图 2 不显示 .navigationTitle
?
我已经坚持了很长时间了。非常感谢任何帮助!
谢谢你,祝你有愉快的一天!
NavigationView 未显示在预览中,因为您的第二个视图没有。没关系。就像你提到的,你不想在这里添加一个。
当您 运行 实际应用时,如果之前的视图有 NavigationView,您的第二个视图也会有。