【发布时间】:2022-01-20 00:00:18
【问题描述】:
我可能已经确定了整个互联网的范围,但找不到答案,因此我伸出了手。
我正在尝试使用 SwiftUI 滚轮选择器让用户进行语言选择,但选择器会粘在列表中的第一个项目上,并且在尝试滚动浏览时不会滚动到新的选择。这在模拟器和物理设备上都会发生。
我花了一天时间阅读各种博客、论坛、问题、教程……所有这些。从我的代码中可以看出,看起来一切都井井有条,但显然我遗漏了一些东西!
有人可以帮我诊断一下吗?代码和环境详情如下。
我认为的轮子选择器:
Picker("", selection: $model.selectedLanguageIndex, content: {
ForEach(0..<model.languages.count, id: \.self) { index in
Text(model.languages[index].name).tag(index)
}
}).pickerStyle(.wheel)
视图声明了一个视图模型:
@StateObject private var model = MyView.viewModel()
并且视图在父元素外标签处也有onAppear函数:
.onAppear(perform: model.load)
视图模型如下所示:
extension MyView {
class viewModel: ObservableObject {
@Published var languages = [language]()
@Published var selectedLanguageIndex = 0
func load() {
MyService.getLanguages { (success, error, languages) in
guard success, error == nil, let languages = languages, !languages.isEmpty else { return }
DispatchQueue.main.async { self.languages = languages }
}
}
}
}
language 模型与 languages 集合一起使用:
struct language: Hashable, Identifiable {
let id: String
let code: String
let name: String
}
环境:
Xcode 13.2
Mac Mini M1 2020 macOS Monterey (Dev machine)
iPhone 11 Pro Max iOS 15.1 (Physical device used for testing)
任何帮助将不胜感激!
【问题讨论】: