У меня есть следующая конструкция кода, которая доставляет мне много хлопот:
//Main View
struct ContentView: View {
var body: some View {
NavigationView{
ZStack(alignment: .center){
CarouselBuilder()
ProfileInvoke().navigationBarTitle("").navigationBarHidden(true)
}
}
}
}
//Carousel filled with Cards from a DB
...code irrelevant for my problem
//Profile Invoke -> Invokes a slide out menu called Menu that has NavigationLinks in it
struct Menu: View {
var body: some View {
ZStack{
VStack(alignment: .center){
MenuButton(buttonText: "Settings", buttonCallView: AnyView(SettingsView() ))
MenuButton(buttonText: "My Favourites", buttonCallView: AnyView(MyFavouritesView()))
MenuButton(buttonText: "Sign Out", buttonCallView: AnyView(SignOutView()))
}.frame(width: UIScreen.main.bounds.width/1.2,alignment: .top)
}
}
}
//MenuButtons are basic NavigationLinks linking to certain Views given as argument when calling them
Теперь я обертываю ZStack
в главном представлении в NavigationView, которое мне нужно для того, чтобы NavigationLinks
на работу. Я также должен сделать это на этом «верхнем» уровне, так как мне нужен новый вид, который будет вызываться ссылками в выдвижном меню, чтобы охватить весь экран, а не только ширину, на которую выводится выдвигающийся вид.
Моя проблема в том, что я, конечно, не хочу, чтобы панель навигации занимала место на главном экране. Для этого я установил для скрытого атрибута значение true. Это позволяет выполнять все приложение, а также отключает навигационное представление в подпредставлениях, связанных с помощью кнопок в меню. Что не дает мне возможности вернуться назад.
Мой вопрос будет: 1) Есть ли более элегантный способ сделать все это? 2) Как я могу повторно вызвать панель навигации в вложенных представлениях? (Установка скрытого атрибута панели навигации обратно на false не работала.