ContentView.swift
// // ContentView.swift // SwiftUIProject // // Created by Cairocoders // import SwiftUI struct ContentView: View { var body: some View { VStack { TitleView() ScrollView { VStack { StoryView() Divider() Spacer() ForEach(userpost) { post in PostView(viewpost: post) } } .navigationBarHidden(true) } } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }TitleView.swift
// // TitleView.swift // SwiftUIProject // // Created by Cairocoders // import SwiftUI struct TitleView: View { var body: some View { HStack { Text("Instagram").font(.title) Spacer() // spacer to push buttons to right HStack(spacing: 16) { // right buttons Button (action: { }) { Image(systemName: "plus") .resizable() .frame(width: 10, height: 10) .padding(4) } .overlay(RoundedRectangle(cornerSize: CGSize(width: 4, height: 4)).stroke(Color.black)) Button (action: { }) { Image(systemName: "heart") .resizable() .frame(width: 20, height: 20) } Button (action: { }) { Image(systemName: "message") .resizable() .frame(width: 20, height: 20) } } .foregroundColor(.black) // make sure all button tint is black } .padding(EdgeInsets(top: 12, leading: 12, bottom: 4, trailing: 12)) } } struct TitleView_Previews: PreviewProvider { static var previews: some View { TitleView() } }StoryView.swift
// // StoryView.swift // SwiftUIProject // // Created by Cairocoders // import SwiftUI struct StoryView: View { @State var user: Userlist? var body: some View { ScrollView(.horizontal, showsIndicators: false) { LazyHStack(alignment: .top, spacing: 0) { ForEach(users) { rs in StoryItemView(viewdata: rs) .padding(4) } } } .padding(.leading, 10) .listRowInsets(EdgeInsets()) } } struct StoryItemView: View { @State var viewdata: Userlist var body: some View { VStack(spacing: 8) { Image(viewdata.photo) // image with red border .resizable() .frame(width: 64, height: 64, alignment: .center) .clipShape(Circle()) .overlay(Circle().stroke(Color.red, lineWidth: 2)) Text(viewdata.username) .font(.caption) .lineLimit(1) } .frame(width: 72) // fixed size } } struct StoryView_Previews: PreviewProvider { static var previews: some View { StoryView() } }PostView.swift
// // PostView.swift // SwiftUIProject // // Created by Cairocoders // import SwiftUI struct PostView: View { @State var viewpost: UserPost @State private var comment: String = "" var body: some View { VStack (alignment: .leading) { // User profile HStack { Image(viewpost.photo) .resizable() .frame(width: 40, height: 40) .clipShape(Circle()) VStack(alignment: .leading, spacing: 4) { Text(viewpost.username).font(.subheadline).bold() Text(viewpost.place) .font(.caption) .opacity(0.8) } Spacer() Button(action: { }) { Text("...").bold() } .foregroundColor(.black) } .padding(.leading, 12) .padding(.trailing, 12) // image Image(viewpost.postimage) .resizable() .scaledToFill() .frame(height: 280) .frame(maxWidth: .infinity) .clipped() // buttons HStack (spacing: 16) { Button (action: { // add action here }) { Image(systemName: "heart") .resizable() .frame(width: 18, height: 18) } Button (action: { // add action here }) { Image(systemName: "message") .resizable() .frame(width: 18, height: 18) } Button (action: { // add action here }) { Image(systemName: "location") .resizable() .frame(width: 18, height: 18) } Spacer() Button (action: { // add action here }) { Image(systemName: "bookmark") .resizable() .frame(width: 18, height: 18) } } .foregroundColor(.black) .padding(EdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16)) // Text VStack (alignment: .leading, spacing: 4) { Text("5.3K likes").font(.caption).bold() Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et").font(.caption) // profile image and comment textfield HStack { Image("4") .resizable() .frame(width: 30, height: 30) .clipShape(Circle()) TextField("Add a comment...", text: $comment).font(.subheadline) } // datetime Text("2 hours ago") .font(.caption) .foregroundColor(.gray) } .padding(.leading, 16) .padding(.trailing, 16) } .padding(.bottom, 24) } } struct PostView_Previews: PreviewProvider { static var previews: some View { PostView(viewpost: UserPost(id: 1, username: "cairocoders", place: "olongapo", description: "sample description", photo: "1", postimage: "post1")) } }Model.swift
// // Model.swift // SwiftUIProject // // Created by Cairocoders // import SwiftUI struct Userlist: Identifiable { let id: Int let username: String let photo : String } var users = [ Userlist(id: 0, username: "Olivia", photo: "1"), Userlist(id: 1, username: "Emma", photo: "2"), Userlist(id: 2, username: "Ava", photo: "3"), Userlist(id: 3, username: "Charlotte", photo: "4"), Userlist(id: 4, username: "Sophia", photo: "5"), Userlist(id: 5, username: "Amelia", photo: "6") ] struct UserPost: Identifiable { let id: Int let username: String let place: String let photo : String let postimage : String } var userpost = [ UserPost(id: 0, username: "Olivia", place: "Olongapo City", photo: "1", postimage: "post1"), UserPost(id: 1, username: "Emma", place: "Angeles City", photo: "2", postimage: "post2"), UserPost(id: 2, username: "Ava", place: "San Fernando", photo: "3", postimage: "post3"), UserPost(id: 3, username: "Charlotte", place: "Manila", photo: "4", postimage: "post4"), UserPost(id: 4, username: "Sophia", place: "Pasay", photo: "5", postimage: "post5"), UserPost(id: 5, username: "Amelia", place: "Baliwag", photo: "6", postimage: "post6") ]