Проблемы с навигацией SwiftUI, «Группа» не разрешается - PullRequest
1 голос
/ 30 сентября 2019

Среда: Xcode 11.1 работает на Catalina (19A573a) и создает приложение только для iOS.

У меня есть следующий код, который должен быть довольно простым. - У меня есть кнопки A - H (8 кнопок) - Когда я нажимаю на кнопку, я ожидаю перехода в соответствующий вид («Вид A», «Вид B» и т. Д.), Поскольку они встроены в NavigationView.

Я столкнулся с несколькими проблемами - с показанным кодом нажатие кнопки «Вид А» не работает, кроме работы других кнопок. - После повторного запуска несколько раз нажатие на кнопку А будет работать несколько раз, но в большинстве случаев не будет работать. - Если я отключу отображение всех кнопок, кроме кнопки А, то нажатие на кнопку А будет работать. - Если я отключаю отображение какой-либо одной кнопки (снова есть 8 кнопок, AH), то нажатие на первую кнопку работает.

  • Я понимаю, что в VStack есть технический предел, превышающий10, и я попробовал сделанное здесь предложение: https://www.hackingwithswift.com/quick-start/swiftui/how-to-group-views-together Но это не работает

  • Я пробовал варианты размещения кнопок в списке, и это не работает.

Любой, кто хочет протестировать, может создать новый проект, скопировать все содержимое кода в файл ContentView.swift и запустить. Example

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            HStack {
                Spacer()

                VStack {
                    Spacer()

                    Group {
                        NavigationLink(destination: ViewA()) {
                            BasicButton(buttonName: "View A", buttonColor: .orange)
                        }

                        NavigationLink(destination: ViewB()) {
                            BasicButton(buttonName: "View B", buttonColor: .red)
                        }

                        NavigationLink(destination: ViewC()) {
                            BasicButton(buttonName: "View C", buttonColor: .green)
                        }

                        NavigationLink(destination: ViewD()) {
                            BasicButton(buttonName: "View D", buttonColor: .blue)
                        }
                    }

                    Group {
                        NavigationLink(destination: ViewE()) {
                            BasicButton(buttonName: "View E", buttonColor: .pink)
                        }

                        NavigationLink(destination: ViewF()) {
                            BasicButton(buttonName: "View F", buttonColor: .gray)
                        }

                        NavigationLink(destination: ViewG()) {
                            BasicButton(buttonName: "View G", buttonColor: .purple)
                        }

                        NavigationLink(destination: ViewH()) {
                            BasicButton(buttonName: "View H", buttonColor: .yellow)
                        }
                    }

                    Spacer()
                }

                Spacer()
            }
            .background(Color.black).edgesIgnoringSafeArea(.all)
        }
    }
}

struct BasicButton: View {
    var buttonName: String
    var buttonColor: Color

    var body: some View {
        Text(buttonName)
            .font(.title)
            .multilineTextAlignment(.center)
            .foregroundColor(.white)
            .frame(width: 300, height: 60)
            .background(buttonColor)
            .cornerRadius(5)
            .padding()
    }
}

struct ViewA: View {
    var body: some View {
        Text("View A").font(.largeTitle)
    }
}

struct ViewB: View {
    var body: some View {
        Text("View B").font(.largeTitle)
    }
}

struct ViewC: View {
    var body: some View {
        Text("View C").font(.largeTitle)
    }
}

struct ViewD: View {
    var body: some View {
        Text("View D").font(.largeTitle)
    }
}
struct ViewE: View {
    var body: some View {
        Text("View E").font(.largeTitle)
    }
}

struct ViewF: View {
    var body: some View {
        Text("View F").font(.largeTitle)
    }
}

struct ViewG: View {
    var body: some View {
        Text("View G").font(.largeTitle)
    }
}

struct ViewH: View {
    var body: some View {
        Text("View H").font(.largeTitle)
    }
}

1 Ответ

0 голосов
/ 30 сентября 2019

Когда вы откроете Debug View Hierarchy , вы заметите, что View A полностью закрыт невидимым NavigationBar, который, даже если он невидим, блокирует все касания от достижения View A.

View Hierarchy

...