我对拉动刷新和导航栏有这个问题。 问题是导航标题在刷新完成后立即跳回顶部(用户实际上没有释放拉动来刷新)。
是否可以避免?不记得 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.