ContentView.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | // // 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() } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | // // 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() } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | // // 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() } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | // // 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" )) } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | // // 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" ) ] |