#swiftui
#swiftui
Вопрос:
Я использую бета-версию Xcode 12.0, чтобы поиграть с LazyVGrid, для отображения этой сетки в scrollview, если на телефоне установлена iOS 14, в противном случае просто для отображения ScrollView в виде одного столбца.
Когда я запускаю это в приложении на своем телефоне (не используя iOS 14), открытие этого представления приводит к сбою моего приложения. Но если я закомментирую раздел «if #available» и просто покажу, что находится в инструкции «else», все будет работать нормально.
Есть ли проблема с if #available в более ранних версиях iOS или мой синтаксис просто неверен?
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()
}
}
}
}
Ответ №1:
Попробуйте обернуть содержимое ScrollView
в Group
(или VStack
) как
ScrollView(.vertical, showsIndicators: false) {
Group {
if #available(iOS 14.0, *) {
// ... new content here
} else {
// ... old content here
}
}
}
Комментарии:
1. Я попытался поместить его в группу, и это, похоже, не помогло это исправить, но я не уверен, что вы имеете в виду под комментарием об этом, если он не находится на уровне тела? Он содержится в теле внутри структуры представления. В этом проблема?