SwiftUI从Alert触发跳转报pushViewController错误无法跳转问题
问题产生原因
这个报错是UIKit转场冲突导致的,分两个场景对应不同的触发逻辑:
- 点击按钮弹出Alert就报错的原因:
SwiftUI的List会自动识别Cell内部的NavigationLink,给整个Cell附加点击跳转的手势,即使你给NavigationLink加了hidden()修饰符,这个Cell级别的点击手势依然会生效。你点击Cell内的Button时,两个事件会同时触发:- Button的action执行,触发Alert弹出(对应UIKit的present模态转场)
- Cell默认的跳转手势触发
NavigationLink的push操作尝试
两个转场同时执行,系统就会抛出你看到的冲突报错。
- 点击Alert的Navigate按钮无法跳转的原因:
Alert本身属于模态弹出的视图,点击按钮后会先执行dismiss消失的转场动画,你在Alert按钮的回调里同步修改isShowingNext = true触发push操作时,dismiss转场还没执行完成,push转场和正在进行的dismiss转场冲突,系统会直接拒绝执行push操作,就出现了跳转失效的问题。
内容的提问来源于stack exchange,提问作者Isaak
相关产品推荐
相关产品推荐

