Image SwiftUI URL图像水平滚动视图

Image SwiftUI URL图像水平滚动视图,image,firebase,swiftui,scrollview,Image,Firebase,Swiftui,Scrollview,因此,我一直在学习SwiftUI instagram教程,并学习如何在标准3x3 instagram视图中加载用户上传到firebase的图像,但现在我想扩展我的知识,并在水平滚动视图中进行实践 以下是创建栅格视图的步骤: import SwiftUI import URLImage import FirebaseAuth struct Photo: Identifiable { let id = UUID() var p

因此,我一直在学习SwiftUI instagram教程,并学习如何在标准3x3 instagram视图中加载用户上传到firebase的图像,但现在我想扩展我的知识,并在水平滚动视图中进行实践

以下是创建栅格视图的步骤:

    import SwiftUI
    import URLImage
    import FirebaseAuth
    
    struct Photo: Identifiable {
        let id = UUID()
        var photo = ""
    }
    
    struct PhotoView: View {
        @Environment(\.presentationMode) var mode: Binding<PresentationMode>
        @EnvironmentObject var session: SessionStore
        @ObservedObject var profileViewModel = ProfileViewModel()

var body: some View {
        
        return
                ScrollView {
                    if !profileViewModel.isLoading {
                        VStack(alignment: .leading, spacing: 1) {
                            // rows
                            ForEach(0..<self.profileViewModel.splitted.count) { index in
                                HStack(spacing: 1) {
                                    // Columns
                                    ForEach(self.profileViewModel.splitted[index], id: \.postId) { post in
                                        
                                        URLImage(URL(string: post.mediaUrl)!,
                                        content: {
                                            $0.image
                                                .resizable()
                                                .aspectRatio(contentMode: .fill)
                                            }).frame(width: UIScreen.main.bounds.width / 3, height: UIScreen.main.bounds.width / 3).clipped().cornerRadius(5)
                                        
                                    }
                                }
                            }
                        }.frame(width: UIScreen.main.bounds.width, alignment: .leading).padding(.top, 2)
                    }
 
                }.navigationBarTitle(Text("Photos"), displayMode: .inline).navigationBarBackButtonHidden(true).navigationBarItems(leading: Button(action : {
                    self.mode.wrappedValue.dismiss()
                }) {
                    Image(systemName: "arrow.left")
                }).onAppear {
                    self.profileViewModel.loadUserPosts(userId: Auth.auth().currentUser!.uid)
        }
    }
}
这就是它看起来的样子:

这是我试图实现的示例代码:

import SwiftUI
import URLImage
import FirebaseAuth

struct TestView: View {
    @Environment(\.presentationMode) var mode: Binding<PresentationMode>
    var body: some View {
        VStack {
            
            ScrollView(.horizontal, showsIndicators: false) {
                HStack(spacing: 2) {
                    ForEach(1..<5) { _ in
                        Image("photo3").resizable()
                            .clipShape(Rectangle())
                            .aspectRatio(contentMode: ContentMode.fill)
                            .frame(width: 100, height: 100).cornerRadius(10).opacity(1).shadow(radius: 4)
                    }
                    
                }
            }.navigationBarTitle(Text("Photos"), displayMode: .inline).navigationBarBackButtonHidden(true).navigationBarItems(leading: Button(action : {
                self.mode.wrappedValue.dismiss()
            }) {
                Image(systemName: "arrow.left")
            })
            Spacer()
        }.padding()
    }
}
导入快捷界面
导入URL图像
导入FirebaseAuth
结构测试视图:视图{
@环境(\.presentationMode)变量模式:绑定
var body:一些观点{
VStack{
滚动视图(.horizontal,showsIndicators:false){
HStack(间距:2){

ForEach(1..您希望循环模型中的帖子。借用您以前的代码,您需要如下内容:

ScrollView(.horizontal, showsIndicators: false) {
    HStack(spacing: 2) {

        ForEach(self.profileViewModel.posts, id: \.postId) { post in
                                        
            URLImage(URL(string: post.mediaUrl)!,
                content: {
                    $0.image
                    .resizable()
                    .aspectRatio(contentMode: .fill)
                }
            )
            .frame(width: 100, height: 100)
            .clipped()
            .cornerRadius(10)
            .shadow(radius: 4)
        }
    }
}

vacawama已经发布了完美的解决方案,让它看起来像你的例子

再加上为什么你会取得这样的结果,你就得到了

代码与示例代码之间的区别在于,您使用了两个ForEach,一个用于行,一个用于列。数组被扩展拆分,因此您得到行和列

//Rows
ForEach(0..<self.profileViewModel.splitted.count) { index in
    HStack(spacing: 1) {
        // Columns
        ForEach(self.profileViewModel.splitted[index], id: \.postId) { post in
ScrollView(.horizontal, showsIndicators: false) {
    HStack(spacing: 2) {

        ForEach(self.profileViewModel.posts, id: \.postId) { post in
                                        
            URLImage(URL(string: post.mediaUrl)!,
                content: {
                    $0.image
                    .resizable()
                    .aspectRatio(contentMode: .fill)
                }
            )
            .frame(width: 100, height: 100)
            .clipped()
            .cornerRadius(10)
            .shadow(radius: 4)
        }
    }
}
//Rows
ForEach(0..<self.profileViewModel.splitted.count) { index in
    HStack(spacing: 1) {
        // Columns
        ForEach(self.profileViewModel.splitted[index], id: \.postId) { post in
ScrollView(.horizontal, showsIndicators: false) {
    HStack(spacing: 2) {
        ForEach(self.profileViewModel.posts, id: \.postId) { post in