import SwiftUI struct MainView: View { @ObservedObject var viewModel: LoginViewModel @State private var selectedTab: Int = 0 @StateObject private var newHomeTabViewModel = NewHomeTabViewModel() // Состояния для TopBarView @State private var selectedAccount = "@user1" @State private var accounts = ["@user1", "@user2", "@user3"] @State private var sheetType: ProfileTab.SheetType? = nil // Состояние для бокового меню @State private var isSideMenuPresented = false private var tabTitle: String { switch selectedTab { case 0: return "Home" case 1: return "Search" case 2: return "Chats" case 3: return "Profile" default: return "Home" } } var body: some View { NavigationView { ZStack { // Основной контент VStack(spacing: 0) { TopBarView( title: tabTitle, selectedAccount: $selectedAccount, sheetType: $sheetType, accounts: accounts, viewModel: viewModel, isSideMenuPresented: $isSideMenuPresented ) ZStack { switch selectedTab { case 0: NewHomeTab(viewModel: newHomeTabViewModel) case 1: SearchTab() case 2: ChatsTab() case 3: ProfileTab(viewModel: viewModel, sheetType: $sheetType, selectedAccount: $selectedAccount, accounts: $accounts, onScroll: { _ in }) default: NewHomeTab(viewModel: newHomeTabViewModel) } } .frame(maxWidth: .infinity, maxHeight: .infinity) CustomTabBar(selectedTab: $selectedTab) { print("Create button tapped") } } .ignoresSafeArea(edges: .bottom) .navigationBarHidden(true) .sheet(item: $sheetType) { type in // ... sheet presentation logic } // Затемнение фона при открытом меню .background(isSideMenuPresented ? Color.black.opacity(0.4) : Color.clear) .onTapGesture { if isSideMenuPresented { withAnimation { isSideMenuPresented = false } } } // Боковое меню if isSideMenuPresented { SideMenuView(isPresented: $isSideMenuPresented) .frame(width: UIScreen.main.bounds.width * 0.8) .offset(x: isSideMenuPresented ? 0 : -UIScreen.main.bounds.width) .transition(.move(edge: .leading)) .zIndex(1) // Убедимся, что меню поверх всего } } } .navigationViewStyle(StackNavigationViewStyle()) } } struct MainView_Previews: PreviewProvider { static var previews: some View { let mockViewModel = LoginViewModel() MainView(viewModel: mockViewModel) } }