[英]SwiftUI: List scrolls up on selection of a row when there's `.id(UUID())`
我有一个选择行和搜索栏的列表。 搜索栏冻结了列表,但我使用id(UUID())
修复了它
它产生了另一个问题,当用户点击一行时,滚动跳转到 top 。 Sometimes, when selecting few rows it crashes with this error: precondition failure: attribute failed to set an initial value: 96
struct ContentView: View {
@ObservedObject var viewModel = ViewModel()
@State private var searchText: String = ""
@State private var selected = Set<Model>()
var body: some View {
VStack {
SearchBar(text: $searchText, placeholder: "Search")
List(
viewModel.strings.filter({ searchText.isEmpty ? true : $0.title.lowercased().contains(searchText.lowercased()) })
, selection: $selected) { model in
MultipleSelectionRow(selectedItems: self.$selected, model: model)
}
.id(UUID()) /// This line causes strange behaviour.
}
}
}
完整的项目在GitLab上可用,还有其他截屏视频和文件,如选择视图、搜索栏和视图模型。
解决了:
最初有两种使用列表的方法,但每种方法都有自己的错误。
我最终使用了带有 UIViewRepresentable 的 UITableView。 当我用 UITableView 替换 List 时,我添加了属性@Binding var offset: CGFloat
并在每次选择行时更新它:
func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
offset = tableView.contentOffset.y
return indexPath
}
对不起,不清楚的问题,当时我的想法很清楚。 感谢您尝试提供帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.