SwiftUI:输入字段键盘动画导致选项卡视图中的其他视图动画

Posted

技术标签:

【中文标题】SwiftUI:输入字段键盘动画导致选项卡视图中的其他视图动画【英文标题】:SwiftUI : Input Field Keyboard animation causing other views in tab view to animate 【发布时间】:2021-04-22 12:16:22 【问题描述】:

与我的 TabView 内视图中的输入字段的交互导致我的其他视图在出现时出现奇怪的动画。此外,导航栏没有按应有的方式隐藏。

我已经确定这是一个输入字段 + TabView 问题,因为:

模拟器上不会出现此问题(键盘不会向上推)。 如果用户在与输入字段交互之前导航到其他选项卡视图,则不会发生这种情况。 当我将标签视图视图的内容放在另一个视图中并导航到它时,不会发生这种情况。

我研究了一些解决方案,但没有运气: 有没有办法覆盖键盘动画? 有没有办法在标签视图加载时强制标签视图视图“出现”? 有没有办法阻止其他 TabView 子视图受到其他 TabView 视图更改的影响

标签页代码

        TabView ()
        ViewA()
            .tabItem 
                Image("viewa").renderingMode(.template)
                  Text("viewa")
            

        ViewB()
            .tabItem 
                  Image("viewb").renderingMode(.template)
                    Text("viewb")
            
        ViewC()
            .tabItem 
              Image("viewc").renderingMode(.template)
                Text("viewc")
             
            
        ViewD()
            .tabItem 
                Image("viewd").renderingMode(.template)
                  Text("viewd")
            

    

在标签视图子视图中,动画被应用到包含我的项目的 VStack 中。

VStack
items...
.animation(.easeInOut)

此代码用于隐藏导航:

        .background(NavigationConfigurator  nav in 
        nav.hidesBarsOnSwipe = true
    )

预期行为:

与输入字段交互时的行为:

【问题讨论】:

我进行了更多故障排除。与输入字段交互时,此时会触发选项卡视图中所有其他视图的 onAppear 方法。为什么与视图中的文本字段交互会导致选项卡视图中的所有其他视图出现? 【参考方案1】:

这似乎是 TabView 和键盘的一个持续错误。解决此问题之前的临时修复是将 VStack 转换为 LazyVStack,以便在必要时不会加载视图。

见:OnAppear calls unexpectedly when Keyboard Appears in SwiftUI

【讨论】:

【参考方案2】:

您可以使用一个修饰符来解决此问题,该修饰符受支持。试试这个:

.ignoresSafeArea(.keyboard)

这将防止任何东西在移动时移出键盘的安全区域。

【讨论】:

我试过这个,但它只会阻止该选项卡内视图上的动画动画。所有视图的 OnAppear 仍然被触发。

以上是关于SwiftUI:输入字段键盘动画导致选项卡视图中的其他视图动画的主要内容,如果未能解决你的问题,请参考以下文章

TabView 在为 SwiftUI 设置动画的选项卡之间切换

SwiftUI 选项卡视图显示表

SwiftUI:再次轻按选定的选项卡时,弹出到根视图

出现 SwiftUI 意外动画

SwiftUI - 在列表中的视图内触发的动画也不会为列表设置动画

处理选项卡选择 SwiftUI