私は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のバグであるようですが、わかりません。どんな助けにも感謝されます。
ありがとう
Viewのリロードを避けるために、TabViewで試してみてください。
.ignoresSafeArea(.keyboard, edges: .bottom)
_
IOS 14でのみ機能します
私自身が同じ問題を持つこと、私はそのようなバグであると思いますが、Appleがそれを修正するまで解決策が得られました。
私がしたことは基本的に私はLazyVStack
を使いました、そしてこれは完全に働いているようです。
_LazyVStack {
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)")
})
}
_
これで、その他のタブのビューのOnAppear
メソッドキーボードが表示されたときに自動的に呼び出されません。