NavigationLink 子项中 "Form" Picker 的 NavigationView 问题
NavigationView issue with "Form" Picker inside NavigationLink child
我在尝试将 Picker 放入 NavigationLink 子结构时遇到了问题。
MyProblem
正如您在经过一些转换(主页 -> 测试页面 -> 选择器)并选择任何选择器所需选项后看到的那样,它会将我导航回测试页面,但选择器本身保持灰色。我知道可以通过在 NavigationLink 子项中添加 NavigationView{}
来解决,但这会导致另一个问题,因为我在顶级祖先中已经有 NavigationView{}
。
AnotherProblem_1
AnotherProblem_2
代码:
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
List{
NavigationLink(destination: page2()) {
Text("Food input")
}
NavigationLink(destination: page3()) {
Text("Тesting page")
}
}
.navigationBarTitle("Main page")
}
}
}
struct page3: View {
@State private var selectedFlavor = Flavor.chocolate
enum Flavor: String, CaseIterable, Identifiable {
case chocolate
case vanilla
case strawberry
var id: String { self.rawValue }
}
var body: some View {
NavigationView {
Form {
Section {
Picker("Flavor", selection: $selectedFlavor) {
Text("Chocolate").tag(Flavor.chocolate)
Text("Vanilla").tag(Flavor.vanilla)
Text("Strawberry").tag(Flavor.strawberry)
}
Text("Selected flavor: \(selectedFlavor.rawValue)")
}
}
}
}
}
更新:
发现我的控制台试图告诉我:“返回一个空的、断开连接的 UIBarButtonItem 以履行非空合同”
我不知道那到底是什么意思,但我发现了一个奇怪的解决方案:
.navigationViewStyle(StackNavigationViewStyle())
Apple 文档对此没有任何说明,但如果您这样设置:
struct ContentView: View {
var body: some View {
NavigationView {
List{
NavigationLink(destination: page2()) {
Text("Food input")
}
NavigationLink(destination: page3()) {
Text("Тesting page")
}
}
.navigationBarTitle("Main page")
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
所有问题都将消失。请解释一下它是如何工作的,我真的坚持了。
struct ContentView: View {
var body: some View {
NavigationView {
List{
NavigationLink(destination: page2()) {
Text("Food input")
}
NavigationLink(destination: page3()) {
Text("Тesting page")
}
}
.navigationBarTitle("Main page")
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
我在尝试将 Picker 放入 NavigationLink 子结构时遇到了问题。
MyProblem
正如您在经过一些转换(主页 -> 测试页面 -> 选择器)并选择任何选择器所需选项后看到的那样,它会将我导航回测试页面,但选择器本身保持灰色。我知道可以通过在 NavigationLink 子项中添加 NavigationView{}
来解决,但这会导致另一个问题,因为我在顶级祖先中已经有 NavigationView{}
。
AnotherProblem_1
AnotherProblem_2
代码:
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
List{
NavigationLink(destination: page2()) {
Text("Food input")
}
NavigationLink(destination: page3()) {
Text("Тesting page")
}
}
.navigationBarTitle("Main page")
}
}
}
struct page3: View {
@State private var selectedFlavor = Flavor.chocolate
enum Flavor: String, CaseIterable, Identifiable {
case chocolate
case vanilla
case strawberry
var id: String { self.rawValue }
}
var body: some View {
NavigationView {
Form {
Section {
Picker("Flavor", selection: $selectedFlavor) {
Text("Chocolate").tag(Flavor.chocolate)
Text("Vanilla").tag(Flavor.vanilla)
Text("Strawberry").tag(Flavor.strawberry)
}
Text("Selected flavor: \(selectedFlavor.rawValue)")
}
}
}
}
}
更新: 发现我的控制台试图告诉我:“返回一个空的、断开连接的 UIBarButtonItem 以履行非空合同” 我不知道那到底是什么意思,但我发现了一个奇怪的解决方案:
.navigationViewStyle(StackNavigationViewStyle())
Apple 文档对此没有任何说明,但如果您这样设置:
struct ContentView: View {
var body: some View {
NavigationView {
List{
NavigationLink(destination: page2()) {
Text("Food input")
}
NavigationLink(destination: page3()) {
Text("Тesting page")
}
}
.navigationBarTitle("Main page")
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
所有问题都将消失。请解释一下它是如何工作的,我真的坚持了。
struct ContentView: View {
var body: some View {
NavigationView {
List{
NavigationLink(destination: page2()) {
Text("Food input")
}
NavigationLink(destination: page3()) {
Text("Тesting page")
}
}
.navigationBarTitle("Main page")
}
.navigationViewStyle(StackNavigationViewStyle())
}
}