这是 SwiftUI 中的错误吗?如果你点击“测试”,它就会进入一个循环,永远一张一张地放。我不明白为什么。
iOS 和 iPadOS 15 上发生这种情况
struct ContentView: View {
@State private var showSheet = false
@State private var name: String = ""
@FocusState private var isFocused: Bool
var body: some View {
VStack {
Button("Test") { setState() }
}
.sheet(isPresented: $showSheet) {
VStack {
Text("\(showSheet.description), \(name)")
TextField("folder name", text: $name)
focused($isFocused)
}
}
}
private func setState() {
print("setState")
showSheet = true
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个错字,通常应该这样关闭,但我认为原因很有趣,值得在这里给出答案:
struct ContentView: View {
@State private var showSheet = false
@State private var name: String = ""
@FocusState private var isFocused: Bool
var body: some View {
VStack {
Button("Test") { setState() }
}
.sheet(isPresented: $showSheet) {
VStack {
Text("\(showSheet.description), \(name)")
TextField("folder name", text: $name)
focused($isFocused) //<-- THIS LINE IS MISSING A `.` -- it should be .focused($isFocused)
}
}
}
private func setState() {
print("setState")
showSheet = true
}
}
Run Code Online (Sandbox Code Playgroud)
.因为您在行中省略了 a focused,所以正在返回其自身而不是 上的focused修饰符。这意味着它会将 的副本添加到下面的视图层次结构中(因为返回了 的修改版本),而不是就地修改 。ContentViewTextFieldContentViewTextFieldfocusedselfTextField
这导致了循环,但因为从技术上讲它是有效的代码,所以它不会生成编译器错误。
| 归档时间: |
|
| 查看次数: |
486 次 |
| 最近记录: |