web-dev-qa-db-ja.com

キーボードがSwiffiuiに表示されたときに予期せずにオフアッハコール

私はSwiftui 2.0とIOS14では非常に奇妙な行動を経験しています。

キーボードが画面に表示されている場合は、他のタブのビューのOnAppearメソッドが自動的に呼び出されます。

ただし、これはファインXcode 11.7に機能します

これがアクションの問題です。 TextField In TabView

これが上記のエラーを生成するコードです。

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のバグであるようですが、わかりません。どんな助けにも感謝されます。

ありがとう

17
Malav Soni

Viewのリロードを避けるために、TabViewで試してみてください。

.ignoresSafeArea(.keyboard, edges: .bottom)
 _

IOS 14でのみ機能します

1
Alfonso Mestre

私自身が同じ問題を持つこと、私はそのようなバグであると思いますが、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メソッドキーボードが表示されたときに自動的に呼び出されません。

Solution

0
Cod3rMax