xcode SwiftUI在使用ScrollView推送到视图时,NavigationBar会以不平稳的方式从LargeTitle折叠到Inline

5rgfhyps  于 2023-05-19  发布在  Swift
关注(0)|答案(1)|浏览(182)

我创建了以下项目来演示此问题。当我推到另一个包含scrollView(本例中为List)的视图,并且定义了navigationTitle时,navigationBar会以一种不稳定的方式从LargeTitle变为inline。如果没有navigationTitle,动画将是平滑的。不知道如何解决这个问题:

import SwiftUI
import CoreData

enum Detail: Hashable {
    case pushedView
}

struct ContentView: View {
    
    @State private var selection: Detail?
    
    @State private var columnVisibility = NavigationSplitViewVisibility.all
    
    var body: some View {
        NavigationSplitView(columnVisibility: $columnVisibility) {
            List(selection: $selection) {
                NavigationLink(value: Detail.pushedView) {
                    Text("Push View")
                }
            }
            .listStyle(.insetGrouped)
            .navigationTitle("Home")
        } detail: {
            switch self.selection {
            case .pushedView:
                PushedView()
            default:
                EmptyView()
            }
        }
        .navigationSplitViewStyle(.balanced)
    }
}

struct PushedView: View {
    
    var body: some View {
        List {
            ForEach((1...30), id: \.self) {n in
                Text("\(n)")
            }
        }
        .navigationTitle("Pushed View")
    }
    
}

polkgigr

polkgigr1#

在具有不同导航栏样式的视图之间转换时,似乎会发生此问题。
我找到了一个解决方法。
下面是PushedView的更新代码:

struct PushedView: View {
    @State private var scrollToIndex: Int = 1

    var body: some View {
        ScrollViewReader { scrollProxy in
            List {
                ForEach((1...30), id: \.self) {n in
                    Text("\(n)")
                }
            }
            .navigationTitle("Pushed View")
            .onAppear {
                withAnimation {
                    scrollProxy.scrollTo(scrollToIndex, anchor: .top)
                }
            }
        }
    }
}

在这里,我将List Package 在ScrollViewReader中以访问scrollProxy,我们可以使用它手动滚动到第一个索引。

相关问题