SwiftUI + Refreshable:导航标题在拉动刷新时跳转

问题描述 投票:0回答:0

我对拉动刷新和导航栏有这个问题。 问题是导航标题在刷新完成后立即跳回顶部(用户实际上没有释放拉动来刷新)。

是否可以避免?不记得 UIKit 有过这个问题。

这是发生了什么:

这是我处理数据刷新的 ViewModel 代码:

    @Published var alerts: [Alert] = []

    ....

    func refresh() async {
        do {
            let result = try await repository.fetchAlerts(page: 1, perPage: 20)
            alerts = result.items
        } catch {
            showErrorBanner(error)
        }
    }

景色:

struct AlertsView: View {
    @StateObject private var viewModel = AlertsViewModel()
    @StateObject private var navigationManager = NavigationManager<AppRoutes>()

    var body: some View {
        NavigationStack(path: $navigationManager.path) {
            ScrollView {
                LazyVStack(alignment: .leading) {
                    ForEach(viewModel.alerts) { alert in
                        Text(alert.body)
                    }
                }
            }
            .refreshable {
                await viewModel.refresh()
            }
            .navigationTitle("Alerts")
            .navigationBarTitleDisplayMode(.large)
        }
        .environmentObject(navigationManager)
    }
}

以为这可能只是我的前端代码搞砸了,但即使是简单的布局(没有任何样式)也会发生这种情况:NavigationStack - ScrollView - LazyVStack - ForEach - Text。

编辑:此问题仅在

navigationBarTitleDisplayMode
设置为
.large
时发生。
.inline
工作正常...

分钟。部署目标设置为 iOS16.

swift swiftui refresh pull-to-refresh refreshable
© www.soinside.com 2019 - 2024. All rights reserved.