ContentView.swift
//
// ContentView.swift
// SwiftUIProject
//
// Created by Cairocoders
//
import SwiftUI
struct ContentView: View {
var body: some View {
ScrollView(.vertical, showsIndicators: false) {
StickyHeader {
StickyHeader {
Image("3")
.resizable()
.aspectRatio(contentMode: .fill)
}
}
HStack(alignment: .center) {
VStack {
Text("Taylor")
.padding()
.font(.title)
Text("Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit..")
.padding()
Image("1")
.resizable()
.aspectRatio(contentMode: .fit)
.padding(.all, 20)
Text("Caitelyn")
.padding()
.font(.title)
Image("2")
.resizable()
.aspectRatio(contentMode: .fit)
.padding(.all, 20)
}.padding(10)
}
.frame(maxWidth: .infinity, alignment: .center)
.background(Color.white)
.modifier(CardModifier())
.padding(.all, 10)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct StickyHeader<Content: View>: View {
var minHeight: CGFloat
var content: Content
init(minHeight: CGFloat = 200, @ViewBuilder content: () -> Content) {
self.minHeight = minHeight
self.content = content()
}
var body: some View {
GeometryReader { geo in
if(geo.frame(in: .global).minY <= 0) {
content
.frame(width: geo.size.width, height: geo.size.height, alignment: .center)
} else {
content
.offset(y: -geo.frame(in: .global).minY)
.frame(width: geo.size.width, height: geo.size.height + geo.frame(in: .global).minY)
}
}.frame(minHeight: minHeight)
}
}
struct CardModifier: ViewModifier {
func body(content: Content) -> some View {
content
.cornerRadius(20)
.shadow(color: Color.black.opacity(0.2), radius: 20, x: 0, y: 0)
}
}