Я хочу создать такую иерархию представлений
ZStack {
TabView {
NavigationView {
NavigationLink ... {
Subview()
}
}
}
FullScreenView()
}
внутри подпредставления есть кнопка, которая переключает переменную окружения для представления полноэкранного представления, как в этом примере: https://github.com/nikishovde/HideTabBarInSubview как ввести содержание подпредставления в полноэкранном режиме, когда переменная showFullscreen имеет значение true? (Я хочу сделать FullScreenView generi c, чтобы использовать его для разных представлений, которые я хочу представить на полном экране)
отредактировано : добавлен код
struct FullScreen: View {
@EnvironmentObject var userData: UserData
var body: some View {
VStack {
Text("INSERT SlidesView() here ...")
}
.frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
.background(Color.red)
}
}
struct SlidesView: View {
@EnvironmentObject var userData: UserData
var slidesURL: String
var body: some View {
ZStack(alignment: .topTrailing) {
Webview(url: slidesURL).padding(5)
Button(action: {
self.userData.showFullScreen.toggle()
}) {
Image(systemName: "arrow.up.left.and.arrow.down.right")
.padding(10)
.background(Color.white)
.clipShape(RoundedRectangle(cornerRadius: 10))
.offset(x: 10, y: 10)
.padding(10)
.foregroundColor(.blue)
}
.navigationBarTitle("test")
}
}
}
struct AppView: View {
@EnvironmentObject var userData: UserData
@ObservedObject var auth = Auth.shared
var body: some View {
ZStack {
Group {
if self.auth.authToken != nil && !self.firstLaunch {
TabView {
ViewWithNavigationView().environmentObject(self.userData)
.tabItem {
Image(systemName: "tv")
Text(verbatim: "Talks")
}.tag(0)
}
} else {
// TODO: 2020-03-06 - Create better onboarding screen
VStack(spacing: 20) {
Text("Hello!").font(.largeTitle)
Text("I prepare Code Conf App for your first use.")
// FIXME: 2020-03-06 - Disable button after first tap and add spinner as loading indicator
Button(action: {
self.firstLaunch.toggle()
UserDefaultsConfig.firstLaunch = self.firstLaunch
}) {
Text("OK")
}
}
}
if self.userData.showFullScreen {
FullScreen().environmentObject(self.userData)
}
}
}
}
}
final class UserData: ObservableObject {
@Published var showFullScreen = false
}