Je ressens un comportement très étrange dans Swiftui 2.0 et iOS14.
Lorsque le clavier apparaît à l'écran, la méthode onappear de la vue d'une autre onglet appelée automatiquement.
Cependant, cela fonctionne bien Xcode 11.7
Voici le code qui produit l'erreur ci-dessus.
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)")
})
}
}
Cela semble être un bug de swiftui 2.0 mais pas sûr. Toute aide serait appréciée.
Merci
Pour éviter de recharger votre vue, essayez avec Tabview
.ignoresSafeArea(.keyboard, edges: .bottom)
Ça ne fonctionne que sur iOS 14
Avoir le même problème moi-même, je pense que c'est un bug ou quelque chose comme ça, mais j'ai proposé une solution peut-être une solution de contournement jusqu'à Apple le réparera.
La chose que j'ai faite est fondamentalement j'ai utilisé un LazyVStack
, et cela semble fonctionner parfaitement.
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)")
})
}
Maintenant, la méthode OnAppear
de la vue d'une autre onglet n'est pas appelée automatiquement lorsque le clavier apparaît.