Ссылка навигации в элементах панели возвращает в начало NavigationView

struct Testing: View {

    var body: some View {
        NavigationView{
            VStack {
                Text("View 1")
                Text("View 1.3")
            
                NavigationLink(destination: TestView(),
                                    label: {
                                        Text("View 1 navigation")
                                    })
            }
        }
    }
}

struct TestView: View {

    var body: some View {
            VStack {
                Text("View 2")
            }
            .navigationBarItems(trailing:NavigationLink(
                                    destination: Text("View 3"),
                                    label: {
                                        Text("Navigate")
                                     }))
    }
}

При нажатии NavigationLink внутри TestViews navigationBarItems происходит переход к представлению 3. Когда я нажимаю кнопку «Назад», он не возвращается в TestView, а вместо этого полностью возвращается к тестированию.

Как мне вернуть его к предыдущему виду вместо первого?

Я использую Xcode 12.


person runemonster    schedule 23.09.2020    source источник
comment
У меня отлично работает на Xcode12, может есть еще что-то?   -  person Itay Brenner    schedule 23.09.2020
comment
В этом файле у меня больше ничего нет, кроме PreviewProvider, который используется только для предварительного просмотра в реальном времени.   -  person runemonster    schedule 23.09.2020


Ответы (1)


Поместите ссылку навигации в основную часть представления навигации (панель не находится в представлении навигации)

Итак, здесь возможен подход

struct TestView: View {
    @State private var isActive = false

    var body: some View {
            VStack {
                Text("View 2")
            }
            .background(
               NavigationLink(destination: Text("View 3"), isActive: $isActive,
                label: { EmptyView() })
            )
            .navigationBarItems(trailing:
               Button("Navigate", action: { self.isActive = true }))
    }
}
person Asperi    schedule 23.09.2020
comment
Я пробовал это, и в настоящее время он не переходит к просмотру 3 при нажатии. Я помещаю оператор печати внутри действия Button с переключателем isActive, и он нажимается, но навигация не работает. - person runemonster; 23.09.2020
comment
Исправлено - набрал здесь и забыл один аргумент. Смотрите обновлено. Протестировано с Xcode 12 / iOS 14. - person Asperi; 23.09.2020
comment
Это работает именно так, как я хочу. Придется ли мне выполнять такую ​​логику для каждого представления, в котором я хочу, чтобы NavigationLink запускался при нажатии кнопки панели? Похоже, код будет довольно запутанным с большим количеством кнопок панели, которые у вас есть. - person runemonster; 23.09.2020
comment
NavigationLink должен быть в теле, чтобы быть помещенным в стек NavigationView, как вы создадите его для повторного использования, зависит от вас. Более того, имейте в виду, что модификатор navigationBarItems устарел в пользу панели инструментов с iOS 14. Просто имейте в виду. - person Asperi; 23.09.2020