Сбрасывается presentationMode (@Environment) при изменении ObservableObject

Проект на IOS 15

У меня есть Loading ObservableObject:

class Loading: ObservableObject {
    @Published var isLoading: Bool = false
}

Также у меня есть ContentView, в котором находятся все View и где располагается мой load (loader который показывается поверх всех view).

struct ContentView: View {
    @StateObject private var loading = Loading()
    
    @State private var rotationAngle = 0.0
    
    @EnvironmentObject var tabBarState: TabBarState
    @ObservedObject private var keyboard = KeyboardResponder()
    
    @State var selectedTab: Tab = .home
    @State var selectedItem: CategoryModel? = nil
    
    init(windowScene: UIWindowScene?) {
        UITabBar.appearance().isHidden = true
    }
    
    var body: some View {
        ZStack {
            VStack(spacing: 0) {
                TabView(selection: $selectedTab) {
                    ForEach(Tab.allCases, id: \.rawValue) { tab in
                        switch selectedTab {
                        case .home:
                            HomeView()
                        case .catalog:
                            CatalogView()
                        case .newProduct:
                            NewProductView()
                        case .message:
                            MessageView()
                        case .profile:
                            RegistrationVariantsView()
                        }
                    }
                }
                CustomTabBar(selectedTab: $selectedTab)
                    .frame(height: keyboard.keyboardHeight != 0 ? 0 : .infinity)
                    .clipped()
                    .animation(.easeInOut, value: keyboard.keyboardHeight)
            }
            
            if loading.isLoading {
                load
            }
        }
        .environmentObject(loading)
    }
}

extension ContentView {
    private var load: some View {
        ZStack {
            Color.red.opacity(0.3)
                .frame(maxHeight: .infinity)
                .edgesIgnoringSafeArea(.all)
            
            Image("preloader")
                .resizable()
                .scaledToFit()
                .frame(width: 28, height: 28)
        }
        .zIndex(50)
    }
}

Проблема заключается в том, что когда я переключился на окно PromotionOneView через NavigationLink и там изменяю isLoading на true, то в таком случае isLoading действительно становится true и показывается, но в этот же момент сбрасывается presentationMode и меня перекидывает на главный экран

struct PromotionOneView: View {
    @Environment(\.presentationMode) var presentationMode
    @EnvironmentObject  var loader: Loading
    
    var body: some View {
        VStack(spacing: 0) {
            ScrollView(showsIndicators: false) {
                Text("Test")
            }
            .frame(maxHeight: .infinity, alignment: .top)
        }
        .background(Color("greyBG"))
        .navigationBarBackButtonHidden(true)
        .navigationBarTitleDisplayMode(.inline)
        .navigationBarHidden(true)
        .toolbar {
            ToolbarItemGroup(placement: .keyboard) {
                Spacer()
                Button("Готово") {
                    DispatchQueue.main.async {
                        UIApplication.shared.endEditing()
                    }
                }
            }
        }
        .safeAreaInset(edge: .bottom, spacing: 0) {
            VStack(spacing: 8) {
                Button(action: {
                    loader.isLoading = true
                }) {
                    Text("Поднять объявление")
                        .frame(maxWidth: .infinity)
                        .font(Font.custom("Manrope", size: 16).weight(.bold))
                        .foregroundColor(.white)
                        .padding(.horizontal, 10)
                        .padding(.vertical, 18)
                }
                .background(Color("green"))
                .cornerRadius(8)
            }
            .padding(.horizontal, 10)
            .padding(.vertical, 10)
        }
    }
}

Попробовал использовать свой модификатор, который будет поверх всего, но из-за того что он будет находится внутри TabView, то CustomTabBar не получится перекрыть


Ответы (0 шт):