ContentView.swift
// // ContentView.swift // SwiftUIProject // // Created by Cairocoders // import SwiftUI struct ContentView: View { @State var selected = 0 var body: some View { ZStack(alignment: .bottom){ VStack{ if self.selected == 0{ GeometryReader{_ in VStack(spacing: 15){ Spacer() Text("Home") .font(.title) .foregroundColor(.white) Image("1").resizable().frame(height: 250).cornerRadius(15) Spacer() }.padding() } } else if self.selected == 1{ GeometryReader{_ in VStack(spacing: 15){ Spacer() Text("Wishlist") .font(.title) .foregroundColor(.white) Image("2").resizable().frame(height: 250).cornerRadius(15) Spacer() }.padding() } } else{ GeometryReader{_ in VStack(spacing: 15){ Spacer() Text("Cart") .font(.title) .foregroundColor(.white) Image("3").resizable().frame(height: 250).cornerRadius(15) Spacer() }.padding() } } }.background(Color.gray) .edgesIgnoringSafeArea(.all) FloatingTabbar(selected: self.$selected) } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } } struct FloatingTabbar : View { @Binding var selected : Int @State var expand = false var body : some View{ HStack{ Spacer(minLength: 0) HStack{ if !self.expand{ Button(action: { self.expand.toggle() }) { Image(systemName: "arrow.left").foregroundColor(.green).padding() } } else{ Button(action: { self.selected = 0 }) { Image(systemName: "house").foregroundColor(self.selected == 0 ? .green : .gray).padding(.horizontal) } Spacer(minLength: 15) Button(action: { self.selected = 1 }) { Image(systemName: "suit.heart").foregroundColor(self.selected == 1 ? .green : .gray).padding(.horizontal) } Spacer(minLength: 15) Button(action: { self.selected = 2 }) { Image(systemName: "cart").foregroundColor(self.selected == 2 ? .green : .gray).padding(.horizontal) } } }.padding(.vertical,self.expand ? 20 : 8) .padding(.horizontal,self.expand ? 35 : 8) .background(Color.white) .clipShape(Capsule()) .padding(22) .onLongPressGesture { self.expand.toggle() } .animation(.interactiveSpring(response: 0.6, dampingFraction: 0.6, blendDuration: 0.6)) } } }