SwiftUI:导航返回时如何平滑过渡bottomBar工具栏?

Posted

技术标签:

【中文标题】SwiftUI:导航返回时如何平滑过渡bottomBar工具栏?【英文标题】:SwiftUI: How to smoothly transition bottomBar toolbar when navigating back? 【发布时间】:2021-01-15 03:15:06 【问题描述】:

我想在我的一个视图中有一个放置.bottomBar 的工具栏。然而,当导航离开并返回时,工具栏不会与视图的其余部分平滑过渡 - 它会突然出现,将视图的全部内容向上移动,如下所示。

这似乎只影响屏幕底部的工具栏 - 您可以看到放置在屏幕顶部的工具栏似乎工作正常。

导航回到第一个屏幕时如何让底部工具栏平滑过渡?

struct ContentView: View 
  var body: some View 
    NavigationView 
      NavigationLink(
        destination: Text("Destination"),
        label: 
          Text("Navigate")
        )
      .toolbar 
        ToolbarItem(placement: .bottomBar) 
          Text("Bottom")
        
        ToolbarItem(placement: .principal) 
          Text("Top")
        
      
    
  

【问题讨论】:

【参考方案1】:

我遇到了和你一样的问题,顶部工具栏很好,但底部工具栏闪烁。

我目前使用的解决方法是手动创建底部工具栏,例如:

struct ContentView: View 
    var body: some View 
        NavigationView 
            VStack 
                Spacer()
                NavigationLink(
                    destination: Text("Destination"),
                    label: 
                        Text("Navigate")
                    )
                Spacer()
                NavigationLink(
                    destination: Text("Destination"),
                    label: 
                        ZStack 
                            Rectangle()
                                .frame(height: 90.0)
                                .foregroundColor(.gray).opacity(0.08)
                                .border(Color.gray, width: 0.2)
                            
                            Text("Bottom")
                                .foregroundColor(.black)
                        
                    )
            
            .edgesIgnoringSafeArea(.all)

            .toolbar 
                ToolbarItem(placement: .principal) 
                    Text("Top")
                
            
        
    

Demo link (not allowed to post images yet)

这并不理想 - 我更喜欢使用 Toolbar API,但这种方式确实会阻止内容向上移动。

【讨论】:

这也是我最终解决的问题。我想这是一个 SwiftUI 错误,希望 Apple 很快会修复它!

以上是关于SwiftUI:导航返回时如何平滑过渡bottomBar工具栏?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 11 大标题导航栏捕捉而不是平滑过渡

SVG悬停时的平滑过渡线性渐变

更改导航栏“prefersLargeTitles”时的平滑过渡

SwiftUI 在选项卡之间导航的正确方式

CSS 转换过渡 - 使用“px”比“百分比”更平滑/性能更好

CSS:如何在另一个动画运行时保持悬停过渡平滑