SwiftUI NavigationStack下拉手势时标题重复问题求助
大家好,我最近跟着苹果的「Build Your Workout App」教程做项目,因为原来用的NavigationLink(_:destination:tag:selection)已经被弃用了,所以打算换成NavigationStack配合.navigationDestination修饰符来重构导航逻辑。大部分功能都已经跑通了,但现在碰到一个奇怪的问题:在三个运动类型按钮的导航栈里,做下拉返回手势的时候,页面标题会出现重复——当前页面的标题和上一级的标题会同时显示出来(下拉过程中两个标题重叠/并存)。
这个问题在模拟器和真机上都会出现,但在Xcode的预览窗口里却完全正常,实在搞不懂为什么。
我把最简化的可复现代码贴出来,一共两个文件:
第一个是主视图文件:
import SwiftUI import Foundation import HealthKit struct sp_7_Navigate3: View { @EnvironmentObject var workoutManager: sp_7_WorkoutManager var workoutTypes: [HKWorkoutActivityType] = [.cycling, .running, .walking] var body: some View { NavigationStack { List(workoutTypes) { workoutType in NavigationLink(value: workoutType) { Label( workoutType.name, systemImage: workoutType.systemImageName ) .padding(.vertical, 8) } } .navigationTitle("Workouts") .navigationDestination(for: HKWorkoutActivityType.self) { workoutType in sp_7_WorkoutView(workoutType: workoutType) } } } } struct sp_7_WorkoutView: View { let workoutType: HKWorkoutActivityType @Environment(\.dismiss) var dismiss var body: some View { VStack { Text("\(workoutType.name) Workout") .font(.title) Button("结束") { dismiss() } } .navigationTitle(workoutType.name) .navigationBarTitleDisplayMode(.inline) } } extension HKWorkoutActivityType { var name: String { switch self { case .cycling: return "Cycling" case .running: return "Running" case .walking: return "Walking" default: return "Unknown" } } var systemImageName: String { switch self { case .cycling: return "bicycle" case .running: return "figure.run" case .walking: return "figure.walk" default: return "questionmark" } } }
第二个是WorkoutManager文件:
import Foundation import HealthKit class sp_7_WorkoutManager: ObservableObject { let healthStore = HKHealthStore() init() { requestAuthorization() } func requestAuthorization() { let types: Set = [HKObjectType.workoutType()] healthStore.requestAuthorization(toShare: types, read: types) { success, error in // 授权逻辑处理 } } }
我试过调整navigationBarTitleDisplayMode的参数,不管是.large还是.automatic都没能解决问题;也检查过有没有重复设置导航标题的地方,但每个页面的标题都是单独定义的,看起来没问题。有没有朋友遇到过类似的情况,或者知道怎么解决这个下拉手势时标题重复的bug?
备注:内容来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

