add post scroll
This commit is contained in:
parent
cca9dd3ce3
commit
a477ce2f78
@ -1,12 +1,10 @@
|
||||
import SwiftUI
|
||||
|
||||
struct PostDetailView: View {
|
||||
let postID: UUID
|
||||
@State private var post: Post?
|
||||
let post: Post
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: 0) {
|
||||
if let post = post {
|
||||
// Шапка поста
|
||||
HStack {
|
||||
Image(systemName: "person.crop.circle.fill")
|
||||
@ -45,6 +43,10 @@ struct PostDetailView: View {
|
||||
.font(.system(size: 24))
|
||||
}
|
||||
Spacer()
|
||||
Button(action: {}) {
|
||||
Image(systemName: "square.and.arrow.down")
|
||||
.font(.system(size: 24))
|
||||
}
|
||||
Button(action: {}) {
|
||||
Image(systemName: "bookmark")
|
||||
.font(.system(size: 24))
|
||||
@ -78,20 +80,6 @@ struct PostDetailView: View {
|
||||
.padding(.top, 4)
|
||||
}
|
||||
.padding(.horizontal)
|
||||
|
||||
Spacer()
|
||||
|
||||
} else {
|
||||
ProgressView("Загрузка...")
|
||||
.onAppear {
|
||||
// Симуляция загрузки поста
|
||||
PostService.shared.fetchPost(by: postID) { fetchedPost in
|
||||
self.post = fetchedPost
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.navigationTitle("Post")
|
||||
}
|
||||
}
|
||||
|
||||
23
Shared/Views/Tab/Profile/PostFeedView.swift
Normal file
23
Shared/Views/Tab/Profile/PostFeedView.swift
Normal file
@ -0,0 +1,23 @@
|
||||
import SwiftUI
|
||||
|
||||
struct PostFeedView: View {
|
||||
let posts: [Post]
|
||||
let selectedPostID: UUID
|
||||
|
||||
var body: some View {
|
||||
ScrollViewReader { proxy in
|
||||
ScrollView {
|
||||
LazyVStack(spacing: 24) {
|
||||
ForEach(posts) { post in
|
||||
PostDetailView(post: post)
|
||||
.id(post.id)
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationBarTitle("Feed", displayMode: .inline)
|
||||
.onAppear {
|
||||
proxy.scrollTo(selectedPostID, anchor: .center)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -28,7 +28,7 @@ struct ProfileContentGrid: View {
|
||||
} else {
|
||||
LazyVGrid(columns: Array(repeating: .init(.flexible()), count: 3), spacing: 2) {
|
||||
ForEach(filteredPosts) { post in
|
||||
NavigationLink(destination: PostDetailView(postID: post.id)) {
|
||||
NavigationLink(destination: PostFeedView(posts: filteredPosts, selectedPostID: post.id)) {
|
||||
Rectangle()
|
||||
.fill(Color.gray.opacity(0.2))
|
||||
.aspectRatio(1, contentMode: .fit)
|
||||
|
||||
@ -37,6 +37,7 @@
|
||||
1ACE61152E22FE2000B37AC5 /* PostDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ACE61142E22FE2000B37AC5 /* PostDetailView.swift */; };
|
||||
1ACE61192E22FF1400B37AC5 /* Post.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ACE61182E22FF1400B37AC5 /* Post.swift */; };
|
||||
1ACE61212E22FFD000B37AC5 /* ProfileContentTabbedGrid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ACE61202E22FFD000B37AC5 /* ProfileContentTabbedGrid.swift */; };
|
||||
1AD757CD2E27608C0069C1FD /* PostFeedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AD757CC2E27608C0069C1FD /* PostFeedView.swift */; };
|
||||
1AE587052E23264800254F06 /* PostService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AE587042E23264800254F06 /* PostService.swift */; };
|
||||
1AE587252E23337000254F06 /* ProfileContentGrid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AE587242E23337000254F06 /* ProfileContentGrid.swift */; };
|
||||
1AEE5EAB2E21A83200A3DCA3 /* HomeTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AEE5EAA2E21A83200A3DCA3 /* HomeTab.swift */; };
|
||||
@ -79,6 +80,7 @@
|
||||
1ACE61142E22FE2000B37AC5 /* PostDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostDetailView.swift; sourceTree = "<group>"; };
|
||||
1ACE61182E22FF1400B37AC5 /* Post.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Post.swift; sourceTree = "<group>"; };
|
||||
1ACE61202E22FFD000B37AC5 /* ProfileContentTabbedGrid.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileContentTabbedGrid.swift; sourceTree = "<group>"; };
|
||||
1AD757CC2E27608C0069C1FD /* PostFeedView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostFeedView.swift; sourceTree = "<group>"; };
|
||||
1AE587042E23264800254F06 /* PostService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostService.swift; sourceTree = "<group>"; };
|
||||
1AE587242E23337000254F06 /* ProfileContentGrid.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileContentGrid.swift; sourceTree = "<group>"; };
|
||||
1AEE5EAA2E21A83200A3DCA3 /* HomeTab.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTab.swift; sourceTree = "<group>"; };
|
||||
@ -256,6 +258,7 @@
|
||||
1AEE5ECC2E21C9D100A3DCA3 /* Profile */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1AD757CC2E27608C0069C1FD /* PostFeedView.swift */,
|
||||
1ACE60FF2E22F54700B37AC5 /* Settings */,
|
||||
1A7940CD2DF7A9AA002569DA /* ProfileTab.swift */,
|
||||
1AB4F8CC2E22E341002B6E40 /* AccountShareSheet.swift */,
|
||||
@ -369,6 +372,7 @@
|
||||
files = (
|
||||
1AEE5EAB2E21A83200A3DCA3 /* HomeTab.swift in Sources */,
|
||||
1ACE60F82E22F3DC00B37AC5 /* SettingsView.swift in Sources */,
|
||||
1AD757CD2E27608C0069C1FD /* PostFeedView.swift in Sources */,
|
||||
1A7940C62DF7A98E002569DA /* ContactsTab.swift in Sources */,
|
||||
1ACE61092E22F57100B37AC5 /* AppPreferencesView.swift in Sources */,
|
||||
1ACE61052E22F56800B37AC5 /* SecuritySettingsView.swift in Sources */,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user