【HarmonyOS NEXT】禁用navigation Dialog模式的转场动画

528 阅读1分钟

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会多一个去不掉的白色背景