PageTabVIewStyle() 使 canvas 预览崩溃
PageTabVIewStyle() crashes the canvas preview
我正在创建一个带有 TabView 的小型 SwiftUI 应用程序,但是在我使用修饰符 .tabViewStyle(PageTabViewStyle()) 后代码立即停止工作。这是为什么?该应用程序旨在循环浏览一系列图像,并且在设计上与照片应用程序相似。它基于 Kavsoft 教程,但该教程使用了已弃用的代码。当我使用更现代的等效项时,应用程序的预览停止工作,我再也看不到 TabView。
struct Home: View {
/* Posts */
@State var posts: [Post] = []
/* Cuurent Image */
@State var currentImage = ""
var body: some View {
/* Gallery */
TabView(selection: $currentImage) {
ForEach(posts) { post in
/* GeometryReader to get screen sizes for image */
GeometryReader { geo in
let size = geo.size
Image(post.image)
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: size.width, height: size.height)
.cornerRadius(0)
}
.edgesIgnoringSafeArea(.all)
}
}
.tabViewStyle(PageTabViewStyle()) // Cannot work
.onAppear {
for index in 1...10 {
posts.append(Post(image: "\(index)"))
}
}
}
}
struct Post: Identifiable, Hashable {
var id = UUID().uuidString
var image: String
}
为了完整起见在这里添加一个答案,我怀疑它适用于像 Text()
这样的静态内容。这是崩溃,因为 ForEach
正在尝试加载尚不存在的帖子,导致它从空数组初始化。要使选项卡视图正常工作,至少需要一个渲染视图。
要解决此问题,posts
中至少需要有一个元素才能呈现。
我正在创建一个带有 TabView 的小型 SwiftUI 应用程序,但是在我使用修饰符 .tabViewStyle(PageTabViewStyle()) 后代码立即停止工作。这是为什么?该应用程序旨在循环浏览一系列图像,并且在设计上与照片应用程序相似。它基于 Kavsoft 教程,但该教程使用了已弃用的代码。当我使用更现代的等效项时,应用程序的预览停止工作,我再也看不到 TabView。
struct Home: View {
/* Posts */
@State var posts: [Post] = []
/* Cuurent Image */
@State var currentImage = ""
var body: some View {
/* Gallery */
TabView(selection: $currentImage) {
ForEach(posts) { post in
/* GeometryReader to get screen sizes for image */
GeometryReader { geo in
let size = geo.size
Image(post.image)
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: size.width, height: size.height)
.cornerRadius(0)
}
.edgesIgnoringSafeArea(.all)
}
}
.tabViewStyle(PageTabViewStyle()) // Cannot work
.onAppear {
for index in 1...10 {
posts.append(Post(image: "\(index)"))
}
}
}
}
struct Post: Identifiable, Hashable {
var id = UUID().uuidString
var image: String
}
为了完整起见在这里添加一个答案,我怀疑它适用于像 Text()
这样的静态内容。这是崩溃,因为 ForEach
正在尝试加载尚不存在的帖子,导致它从空数组初始化。要使选项卡视图正常工作,至少需要一个渲染视图。
要解决此问题,posts
中至少需要有一个元素才能呈现。