Image SwiftUI URL图像水平滚动视图
因此,我一直在学习SwiftUI instagram教程,并学习如何在标准3x3 instagram视图中加载用户上传到firebase的图像,但现在我想扩展我的知识,并在水平滚动视图中进行实践 以下是创建栅格视图的步骤: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
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