1. 背景
在API13 之前NavDestination 设置mode为.mode(NavDestinationMode.DIALOG)时,打开弹框和关闭弹框是没有系统转场动画的。升级到API13后,系统帮我们带了转场动画【😒】。如何去除这段动画呢?
2. 解决方案
在根Navigation 上使用customNavContentTransition,判断from或者to 是弹框的情况下, 返回一个空的动画
Navigation()
.customNavContentTransition((from: NavContentInfo, to: NavContentInfo, operation: NavigationOperation) => {
if (from.mode == NavDestinationMode.DIALOG || to.mode == NavDestinationMode.DIALOG) {
//此处代码是为了屏蔽nav dialog 模式下自带动画的问题
let customAnimation: NavigationAnimatedTransition = {
timeout: 0,
transition: (transitionProxy: NavigationTransitionProxy) => {
transitionProxy.finishTransition();
}
};
return customAnimation;
}
//undefined 默认动画
return undefined
})
3. 注意事项
如果禁用了转场动画,那么跳转是dialog mode的NavDestination时, pushPathByName 中的animated需要传false, 如果是true,则NavContent会多一个去不掉的白色背景