SwiftUI NavigationPath初始化异常:已填充数组触发约束冲突警告
问题原因
直接用包含元素的数组初始化@State修饰的NavigationPath,会让NavigationStack在视图初始化阶段就尝试构建包含该路径元素的导航栈。此时根视图(这里是EmptyView)还未完成布局,导航栈的视图层级无法正确匹配,进而触发Auto Layout约束冲突。
解决方案
将NavigationPath的初始化改为空路径,然后在视图完成布局后(onAppear回调中)设置要恢复的导航路径:
import SwiftData import SwiftUI struct ControlView: View { // 初始化为空路径 @State var path = NavigationPath() var body: some View { ZStack { NavigationStack(path: $path) { EmptyView() .navigationDestination(for: Int.self) { index in Text("Index: \(index)") } // 视图出现后设置导航路径 .onAppear { path = NavigationPath([1]) } } } } } #if DEBUG struct DummyControlView: View { @StateObject private var appState = AppState() var body: some View { ControlView() .environmentObject(appState) } } #endif #Preview { DummyControlView() .modelContainer(for: Item.self, inMemory: true) }
补充说明
如果需要从持久化存储中恢复用户的导航路径,同样建议在onAppear中读取存储的数据并赋值给path,避免在视图初始化阶段直接修改导航栈状态。
内容的提问来源于stack exchange,提问作者Non Reply
相关产品推荐
相关产品推荐

