【发布时间】:2025-12-17 12:15:02
【问题描述】:
我刚刚发现了一个有趣的行为。如果 List 的 .id(UUID().uuidString) 修饰符被注释,当用户修改在初始视图中不可见的绑定控件的值时(这意味着该控件可能在靠近列表末尾的某处),列表将向上滚动,因为绑定值将刷新视图。但是,如果 .id(UUID().uuidString) 修饰符被注释掉,列表将不会向上滚动,它将保持原样 - 这对我有好处。
我只是好奇这是否是预期的行为。当为列表提供 id 时,有什么会阻止向上滚动吗?
import SwiftUI
struct ScrollUpProblem: View {
@EnvironmentObject var qList: MemoryObjectRep // MemoryObjectRep is a class keeping published parameters.
var body: some View {
NavigationView{
List{
ForEach(self.qList.QuestionList) { question in
ScrollUpProblemDetail(question: self.$qList.QuestionList[self.qList.QuestionList.firstIndex(of: question)!] )
}
}
.id(UUID().uuidString) // <<<<<<<< ATTENTION HERE
}
}
}
struct ScrollUpProblemDetail: View {
@Binding var question: SurveyQuestion
var body: some View {
NavigationLink(destination:QuestionCardDetail(question: $question)){
HStack(spacing: 0){
Text("AnyText")
Spacer()
Toggle(isOn: self.$question.BoolValue)
{
Text("")
}.id(UUID().uuidString)
}
}
}
}
【问题讨论】:
-
天啊,这也是另一个错误的原因 [*.com/questions/59858800/… 由于某种原因,绑定的步进控制在多次点击时不起作用。
-
swiftui-lab.com/swiftui-id 完美解释...检查一下!