Vladimir Dubovik edfe97c6dc Commit
2025-04-04 11:01:33 +03:00

72 lines
2.6 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// CustomTabBarView.swift
// Schedule ICTIS
//
// Created by Mironov Egor on 13.11.2024.
//
import SwiftUI
struct TabBarView: View {
@Binding var selectedTab: TabBarModel
@Namespace private var animation
var body: some View {
VStack {
Spacer()
HStack(spacing: 15) {
content
}
.animation(.smooth(duration: 0.3, extraBounce: 0), value: selectedTab)
.padding(6)
.background(.white)
.mask(RoundedRectangle(cornerRadius: 24, style: .continuous))
.shadow(color: .black.opacity(0.4), radius: 20, x: 8, y: 8)
//.background(
// background
// .shadow(.drop(color: Color.black.opacity(0.08), radius: 5, x: 5, y: 5))
// .shadow(.drop(color: Color.black.opacity(0.08), radius: 5, x: 5, y: -5)),
// in: .capsule
//)
}
.ignoresSafeArea(.keyboard, edges: .bottom) // Фиксаци таб-бара, при появлении клавиатуры
}
var content: some View {
ForEach(TabBarModel.allCases, id: \.rawValue) { tab in
Button {
selectedTab = tab
} label: {
VStack (alignment: .center) {
Image(systemName: tab.rawValue)
.font(.title3)
.fontWeight(.regular)
}
.frame(width: 70, height: 28)
.foregroundStyle(selectedTab == tab ? Color.white : Color("blueColor"))
.padding(.vertical, 7)
.padding(.leading, 13)
.padding(.trailing, 13)
.background {
if selectedTab == tab {
Capsule()
.fill(
LinearGradient(
gradient: Gradient(stops: [
.init(color: Color("blueColor").opacity(0.9), location: 0.0),
.init(color: Color("blueColor").opacity(0.9), location: 0.5),
.init(color: Color("blueColor").opacity(1.0), location: 1.0)
]),
startPoint: .top,
endPoint: .bottom
)
)
.matchedGeometryEffect(id: "ACTIVETAB", in: animation)
}
}
}
.buttonStyle(.plain)
}
}
}