tab bar update

This commit is contained in:
cheykrym 2025-07-25 00:20:25 +03:00
parent 0cd38f3922
commit 4f46f715aa
3 changed files with 115 additions and 34 deletions

View File

@ -0,0 +1,84 @@
import SwiftUI
struct CustomTabBar: View {
@Binding var selectedTab: Int
var onCreate: () -> Void
var body: some View {
HStack {
// Tab 1: Feed
TabBarButton(systemName: "list.bullet.rectangle", text: "Лента", isSelected: selectedTab == 0) {
selectedTab = 0
}
// Tab 2: Search
TabBarButton(systemName: "magnifyingglass", text: "Поиск", isSelected: selectedTab == 1) {
selectedTab = 1
}
// Create Button
CreateButton {
onCreate()
}
// Tab 3: Chats
TabBarButton(systemName: "bubble.left.and.bubble.right.fill", text: "Чаты", isSelected: selectedTab == 2) {
selectedTab = 2
}
// Tab 4: Profile
TabBarButton(systemName: "person.crop.square", text: "Лицо", isSelected: selectedTab == 3) {
selectedTab = 3
}
}
.padding(.horizontal)
.padding(.top, 1)
.padding(.bottom, 18) // Добавляем отступ снизу
.background(Color(.systemGray6))
}
}
struct TabBarButton: View {
let systemName: String
let text: String
let isSelected: Bool
let action: () -> Void
var body: some View {
Button(action: action) {
VStack(spacing: 4) {
Image(systemName: systemName)
.font(.system(size: 22))
Text(text)
// .font(.caption)
.font(.system(size: 12))
}
.foregroundColor(isSelected ? .accentColor : .gray)
}
.frame(maxWidth: .infinity)
}
}
struct CreateButton: View {
let action: () -> Void
var body: some View {
Button(action: action) {
Image(systemName: "plus")
.font(.system(size: 24, weight: .bold))
.foregroundColor(.white)
.padding(16)
// .background(Color.accentColor)
.background(
LinearGradient(
gradient: Gradient(colors: [.blue, .white]),
startPoint: .top,
endPoint: .bottom
)
)
.clipShape(Circle())
.shadow(radius: 4)
}
.offset(y: -3)
}
}

View File

@ -12,42 +12,35 @@ struct MainView: View {
@State private var selectedTab: Int = 0
var body: some View {
TabView(selection: $selectedTab) {
HomeTab()
.tabItem {
Image(systemName: "list.bullet.rectangle")
Text("Лента")
VStack(spacing: 0) {
ZStack {
switch selectedTab {
case 0:
HomeTab()
case 1:
SearchTab()
case 2:
ChatsTab()
case 3:
ProfileTab(viewModel: viewModel)
default:
HomeTab()
}
.tag(0)
SearchTab()
.tabItem {
Image(systemName: "magnifyingglass")
Text("Поиск")
}
.tag(1)
// PublicsTab()
// .tabItem {
// Image(systemName: "")
// Text("Свайп")
// }
// .tag(1)
ChatsTab()
.tabItem {
Image(systemName: "bubble.left.and.bubble.right.fill")
Text("Чаты")
}
.tag(2)
ProfileTab(viewModel: viewModel)
.tabItem {
Image(systemName: "person.crop.square")
Text("Лицо")
}
.tag(3)
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
CustomTabBar(selectedTab: $selectedTab) {
// Действие для кнопки "Создать"
print("Create button tapped")
}
}
.ignoresSafeArea(edges: .bottom)
}
}
struct MainView_Previews: PreviewProvider {
static var previews: some View {
let mockViewModel = LoginViewModel()
MainView(viewModel: mockViewModel)
}
}

View File

@ -10,6 +10,7 @@
1A0276032DF909F900D8BC53 /* refreshtokenex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A0276022DF909F900D8BC53 /* refreshtokenex.swift */; };
1A0276112DF9247000D8BC53 /* CustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A0276102DF9247000D8BC53 /* CustomTextField.swift */; };
1A2302112E3050C60067BF4F /* SearchViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A2302102E3050C60067BF4F /* SearchViewModel.swift */; };
1A6FB9552E32D2B200E89EBE /* CustomTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A6FB9542E32D2B200E89EBE /* CustomTabBar.swift */; };
1A79408D2DF77BC3002569DA /* yobbleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A79407A2DF77BC2002569DA /* yobbleApp.swift */; };
1A79408F2DF77BC3002569DA /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A79407B2DF77BC2002569DA /* ContentView.swift */; };
1A7940902DF77BC3002569DA /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A79407B2DF77BC2002569DA /* ContentView.swift */; };
@ -51,6 +52,7 @@
1A0276022DF909F900D8BC53 /* refreshtokenex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = refreshtokenex.swift; sourceTree = "<group>"; };
1A0276102DF9247000D8BC53 /* CustomTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTextField.swift; sourceTree = "<group>"; };
1A2302102E3050C60067BF4F /* SearchViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchViewModel.swift; sourceTree = "<group>"; };
1A6FB9542E32D2B200E89EBE /* CustomTabBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomTabBar.swift; sourceTree = "<group>"; };
1A79407A2DF77BC2002569DA /* yobbleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = yobbleApp.swift; sourceTree = "<group>"; };
1A79407B2DF77BC2002569DA /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
1A79407C2DF77BC3002569DA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
@ -250,6 +252,7 @@
1AEE5EA92E21A4FC00A3DCA3 /* Tab */ = {
isa = PBXGroup;
children = (
1A6FB9542E32D2B200E89EBE /* CustomTabBar.swift */,
1A7940B52DF77F21002569DA /* MainView.swift */,
1AEE5EAA2E21A83200A3DCA3 /* HomeTab.swift */,
1AEE5EB22E21A85800A3DCA3 /* SearchTab.swift */,
@ -392,6 +395,7 @@
1A7940DE2DF7B0D7002569DA /* config.swift in Sources */,
1A2302112E3050C60067BF4F /* SearchViewModel.swift in Sources */,
1AE587252E23337000254F06 /* ProfileContentGrid.swift in Sources */,
1A6FB9552E32D2B200E89EBE /* CustomTabBar.swift in Sources */,
1A0276032DF909F900D8BC53 /* refreshtokenex.swift in Sources */,
1A7940B62DF77F21002569DA /* MainView.swift in Sources */,
1A7940E22DF7B1C5002569DA /* KeychainService.swift in Sources */,