Ссылка SwiftUi Navigation на то же представление всегда добавляется как подвид

Я пытаюсь перейти к тому же представлению с разными данными из ссылки навигации в текущем представлении.

Однако я вижу, что новое представление при переходе к нему добавляется как дочернее представление под первым представлением. Как на изображении, показанном ниже. Ожидается ли это?

введите описание изображения здесь  введите описание изображения здесь

Код выглядит примерно так.

View1 - это

VStack {
   HStack {
      Text("")
   }
   Divider()
   HStack {
      Text("some text")
   }
   NavigationView {
      VStack {
          NavigationLink(destination: View1(data: newData) {
              Text("option")
          }
      }
   }
}

person abhishek mishra    schedule 03.01.2021    source источник
comment
Да, это ожидаемо. NavigationLink перемещает внутри NavigationView, поэтому, если NavigationView меньше, чем весь экран, вы получите то, что получаете.   -  person Asperi    schedule 03.01.2021
comment
Спасибо. Итак, есть ли способ иметь навигационные ссылки, которые являются только частью экрана, и при этом открывать их представления, занимающие весь экран? Полагаю, чтобы это работало, у меня должен быть полный экран внутри навигационного представления? Мое намерение состоит в том, чтобы иметь текстовое меню и навигационное меню. После перехода по ссылке навигации щелкните элемент меню, откройте другое представление, в котором есть другой текст в текстовом представлении и новый набор пунктов меню в связанном представлении навигации.   -  person abhishek mishra    schedule 03.01.2021


Ответы (1)


Судя по вашему комментарию, вы, кажется, неправильно понимаете, что на самом деле делает NavigationView. Думайте об этом как о UINavigationController (потому что он, по сути, один), а NavigationLink как о представлении с действием перехода в раскадровку Touch Up Inside.

Как сказал Аспери, NavigationView должно быть родительским представлением:

var body: some View {
    NavigationView {
        [...]

        NavigationLink(destination: View1(data: newData) {
            [...]
        }
    }
}
person Tamás Sengel    schedule 03.01.2021