Программное использование NavigationLink в SwiftUI

Я ищу способ отображать представление в моем приложении WatchOS «на один уровень» из NavigationView при запуске приложения, если выполняются определенные условия.

Мне нужен такой же эффект, как если бы я сам нажал NavigationLink, то есть возможность снова вернуться в NavigationView, что невозможно, если я сразу выберу отображение желаемого вида.

«navigationBarItems» также недоступен для WatchOS, что делает невозможным переход назад без фактического щелчка по NavigationLink в первую очередь.

Есть ли способ программно «щелкнуть» NavigationLink для этого?


person heinz_dieter    schedule 11.09.2019    source источник


Ответы (1)


У меня нет опыта работы с watchOS, но я использовал " isActive "вариант NavigationLink для аналогичных приложений.

В исходном представлении определите @State var showOneLevelIn = false (или какую-либо другую привязку) и установите для этого состояния var значение true, если вы хотите, чтобы представление автоматически переходило на ваш второй уровень. Ярлыком для NavigationLink является EmptyView (), поэтому он не будет виден в вашем первоначальном представлении.

NavigationLink(destination: OneLevelInView(), isActive: $showOneLevelIn, label: { EmptyView() })

person KB-YYZ    schedule 11.09.2019
comment
Похоже, в симуляторе есть ошибка. Работает только с первого раза. На реальном устройстве работает без проблем. - person Yannick; 18.02.2020
comment
Вы можете добавить .disabled(true), чтобы отключить навигацию по нажатию на ссылку, добавить .hidden(), чтобы убрать стрелки навигации. - person Iaenhaall; 26.01.2021
comment
[iOS, а не WatchOS] Я нашел этот ответ, когда пытался скрыть NavigationLink, который занимал место в представлении. Если я помещу свою NavigationLink в ZStack, чтобы она не занимала места в View, NavigationLink срабатывала, когда другие элементы поверх NavigationLink имели TapGesture. .hidden () и .disabled (true) отлично работали в сочетании с ZStack. спасибо @laenhaall - person dwaz; 18.03.2021