if#可用SwiftUI低于iOS 14的问题
我正在使用Xcode 12.0的beta版来处理LazyVGrid,如果手机有iOS 14,则在scrollview中渲染该网格,否则仅将scrollview渲染为一列 当我在手机上的应用程序上启动此视图时(不使用iOS 14),打开此视图会导致我的应用程序崩溃。但是如果我注释掉“if#available”部分,只显示“else”语句中的内容,它就可以正常工作 iOS早期版本中的if#是否存在问题,或者我的语法是否不正确if#可用SwiftUI低于iOS 14的问题,swiftui,Swiftui,我正在使用Xcode 12.0的beta版来处理LazyVGrid,如果手机有iOS 14,则在scrollview中渲染该网格,否则仅将scrollview渲染为一列 当我在手机上的应用程序上启动此视图时(不使用iOS 14),打开此视图会导致我的应用程序崩溃。但是如果我注释掉“if#available”部分,只显示“else”语句中的内容,它就可以正常工作 iOS早期版本中的if#是否存在问题,或者我的语法是否不正确 var body: some View { Nav
var body: some View {
NavigationView {
VStack {
//Empty View navigation link to choose the selected pack in User Defaults.
ScrollView(.vertical, showsIndicators: false) {
//Checks if iOS version 14.0 is available to render the lazy grid view
if #available(iOS 14.0, *) {
LazyVGrid(columns: [GridItem(.flexible()), GridItem(.flexible())], spacing: 15) {
//checks if the pack is in the purchased list - if so, renders it as an unlocked tile.
ForEach((allPacks), id: \.self) { pack in
UnlockedPackTile(tilePack: pack)
.onTapGesture {
print("Originally tapped \(pack.name)")
self.userInformation.defaultPack = pack
self.isPresented.toggle()
}
}
}
} else {
//does this as a simple stack instead if iOS 14 is not available.
ForEach((allPacks), id: \.self) { pack in
UnlockedPackTile(tilePack: pack)
.onTapGesture {
print("Originally tapped \(pack.name)")
self.userInformation.defaultPack = pack
self.isPresented.toggle()
}
}
}
}
尝试将
ScrollView
的内容包装到组(或VStack
)中,如
我试着把它放在一个小组里,但这似乎并没有解决它,但我不确定你的评论是什么意思,如果不是在身体层面的话?它包含在视图结构的主体中。这就是问题所在吗?
ScrollView(.vertical, showsIndicators: false) {
Group {
if #available(iOS 14.0, *) {
// ... new content here
} else {
// ... old content here
}
}
}