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")
]
