繁体   English   中英

键盘外观导致使用 SwiftUI 在 TabView 中触发前一个选项卡

[英]Keyboard appearance causes preceding tab to fire onAppear in TabView using SwiftUI

请参阅下面的代码作为要遵循的谈话要点的参考:

struct ContentView: View {
    var body: some View {
        TabView {
            Tab1()
                .tabItem {
                    Label("Tab 1", systemImage: "square.and.arrow.up")
                }
            
            Tab2()
                .tabItem {
                    Label("Tab 2", systemImage: "scribble")
                }
            
            Tab3()
                .tabItem {
                    Label("Tab 3", systemImage: "pencil.tip")
                }
            
        }
    }
}

struct Tab1:View {
    var body:some View {
        Text("Tab 1")
            .onAppear {
                print("Tab 1 Shown")
            }
    }
    
}

struct Tab2:View {
    var body:some View {
        Text("Tab 2")
            .onAppear {
                print("Tab 2 Shown")
            }
    }
    
}

struct Tab3:View {
    
    @State var text:String = ""
    
    var body:some View {
        TextField("Type something", text: $text)
            .onAppear {
                print("Tab 3 Shown")
            }
    }
    
}

当这个应用程序启动时,它会出现在 Tab 1 上。它会打印“Tab 1 Shown”,这是完全正常的和预期的。 当我按 Tab 3 时,它将打印预期的“Tab 3 Shown”。 我遇到的问题是,当我按下TextField时,它会打印出“Tab 2 Shown”,这是不正确的。 我仍在选项卡 3 上。此结果出乎意料,似乎显示键盘会导致此问题。 这会导致我正在处理的应用程序出现其他问题——这个应用程序只是演示了这个问题。 我有以下问题:

  1. 这是 TabView 组件中的错误吗?
  2. 当键盘显示在选项卡 3 中时,如何停止打印“显示的选项卡 2”,但仅在选择选项卡 2 时才打印出“显示的选项卡 2”?

我只是把这个留给下一个遇到类似问题的人。 简而言之,这发生在 iOS14 上。 在 iOS15 上,Apple 似乎已经解决了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM