ContentView.swift
//
// ContentView.swift
// SwiftUIProject
//
// Created by Cairocoders
//
import SwiftUI
struct ContentView: View {
@State var selection = 1
var body: some View {
VStack {
ZStack(alignment: .bottomTrailing) {
Image("coffee").resizable().frame(height: 350)
HStack(spacing: 15){
Text("Kapeng Barako")
.foregroundColor(.white)
}.padding()
}
Text("Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit")
DropdownPicker(title: "Size", selection: $selection, options: ["Small", "Medium", "Large", "X-Large"])
Button("Place Order") {
}
.foregroundColor(.white)
.frame(width: 300, height: 50)
.background(Color.orange)
.cornerRadius(10)
Spacer()
}.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct DropdownPicker: View {
var title: String
@Binding var selection: Int
var options: [String]
@State private var showOptions: Bool = false
var body: some View {
ZStack {
// current selection
HStack {
Text(title)
Spacer()
Text(options[selection])
.foregroundColor(Color.black.opacity(0.6))
Image(systemName: "chevron.right")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 10, height: 10)
}
.font(Font.custom("Avenir Next", size: 16).weight(.medium))
.padding(.horizontal, 12)
.padding(.vertical, 8)
.background(Color.white)
.onTapGesture {
// show the dropdown options
withAnimation(Animation.spring().speed(2)) {
showOptions = true
}
}
// Drop down options
if showOptions {
VStack(alignment: .leading, spacing: 4) {
Text(title)
.font(Font.custom("Avenir Next", size: 16).weight(.semibold))
.foregroundColor(.white)
HStack {
Spacer()
ForEach(options.indices, id: \.self) { i in
if i == selection {
Text(options[i])
.font(.system(size: 12))
.padding(.vertical, 8)
.padding(.horizontal, 12)
.background(Color.white.opacity(0.2))
.cornerRadius(4)
.onTapGesture {
// hide dropdown options - user selection didn't change
withAnimation(Animation.spring().speed(2)) {
showOptions = false
}
}
} else {
Text(options[i])
.font(.system(size: 12))
.onTapGesture {
// update user selection and close options dropdown
withAnimation(Animation.spring().speed(2)) {
selection = i
showOptions = false
}
}
}
Spacer()
}
}
.padding(.vertical, 2)
.transition(AnyTransition.move(edge: .top).combined(with: .opacity))
}
.padding(.horizontal, 12)
.padding(.vertical, 8)
.background(Color.black)
.foregroundColor(.white)
.transition(.opacity)
}
}
}
}