【发布时间】:2021-01-09 15:02:46
【问题描述】:
我在 SwiftUI 2.0 和 iOS14 中遇到了非常奇怪的行为。
当键盘出现在屏幕上时,自动调用其他标签视图的OnAppear方法。
但是,这在 Xcode 11.7 中运行良好
这是产生上述错误的代码。
struct ContentView: View {
var body: some View {
TabView {
DemoView(screenName: "Home")
.tabItem {
Image.init(systemName: "star.fill")
Text("Home")
}
DemoView(screenName: "Result")
.tabItem {
Image.init(systemName: "star.fill")
Text("Result")
}
DemoView(screenName: "More")
.tabItem {
Image.init(systemName: "star.fill")
Text("More")
}
}
}
}
struct DemoView:View {
@State var text:String = ""
var screenName:String
var body: some View {
VStack{
Text(screenName)
.font(.title)
TextField("Buggy Keyboard Issue", text: $text)
.textFieldStyle(RoundedBorderTextFieldStyle())
Text("Issue : When keyboard appears, onAppear of other 2 tabs call automatically.")
.font(.footnote)
}
.padding()
.onAppear(perform: {
debugPrint("OnAppear of : \(screenName)")
})
}
}
这似乎是 SwiftUI 2.0 的错误,但不确定。 任何帮助将不胜感激。
谢谢
【问题讨论】:
-
我已经向 Apple 报告了这种行为。 feedbackassistant.apple.com/feedback/8732425
-
SwiftUI onAppear 不等于 UIKit viewDidAppear。 一旦视图在视图层次结构中呈现,它们就会调用 onAppear(而不是当它对用户可见时)。何时、为什么以及调用多少次是完全不同的问题,实际上并没有在任何地方指定/记录,所以我不会依赖这种行为,因为它是从一个版本到另一个版本的变化。
-
不。你有过同样的经历吗?
-
是的,我有:/ .
-
对我来说同样的问题!。如果我们不能依赖
onAppear,当视图可见时我们应该在哪里进行网络调用。
标签: keyboard swiftui textfield tabview swiftui-tabview