HarmonyOS 鸿蒙Next 自定义弹窗中跳转新的NavDestination页面,自定义弹窗会压在NavDestination页面上

发布于 1周前 作者 htzhanglong 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 自定义弹窗中跳转新的NavDestination页面,自定义弹窗会压在NavDestination页面上

自定义弹窗跳转新的NavDestination页面时,不让弹窗压在新的页面上

3 回复
@Component

struct Page01 {

  @Consume('pageInfos') pageInfos: NavPathStack;

  build() {

    NavDestination() {

      // Button('push Page01')

      //   .width('80%')

      //   .onClick(() => {

      //     this.pageInfos.pushPathByName('Page01', '');

      //   })

      //   .margin({top: 10, bottom: 10})

      Button('push Dialog01')

        .width('80%')

        .onClick(() => {

          this.pageInfos.pushPathByName('Dialog01', '');

        })

        .margin({top: 10, bottom: 10})

    }

    .title('Page01')

  }

}

@Component

struct Page02 {

  @Consume('pageInfos') pageInfos: NavPathStack;

  build() {

    NavDestination() {

      Column(){

        Text("hello---------------------------------------------------------")

        Text("hello---------------------------------------------------------")

        Text("hello---------------------------------------------------------")

        Text("hello---------------------------------------------------------")

        Text("hello---------------------------------------------------------")

      }

    }

    .title('Page02')

  }

}

@Component

struct Dialog011 {

  @Consume('pageInfos') pageInfos: NavPathStack;

  build() {

    NavDestination() {

      Stack() {

        Column()

          .width('100%')

          .height('100%')

          .backgroundColor(Color.Gray)

          .opacity(0.1)

          .onClick(() => {

            this.pageInfos.pop();

          })

        // Add controls for business processing

        Column() {

          Text('Dialog01')

            .fontSize(30)

            .fontWeight(2)

          Button('push Page02')

            .width('80%')

            .onClick(() => {

              this.pageInfos.pushPathByName('Page02', '');

            })

            .margin({top: 10, bottom: 10})

          // Button('push Dialog01')

          //   .width('80%')

          //   .onClick(() => {

          //     this.pageInfos.pushPathByName('Dialog01', '');

          //   })

          //   .margin({top: 10, bottom: 10})

          Button('关闭')

            .width('80%')

            .onClick(() => {

              this.pageInfos.pop();

            })

            .margin({top: 10, bottom: 10})

        }

        .padding(10)

        .width(250)

        .backgroundColor(Color.White)

        .borderRadius(10)

      }

    }

    .hideTitleBar(true)

    // Set the mode property of this NavDestination to DIALOG

    .mode(NavDestinationMode.DIALOG)

  }

}

@Entry

@Component

struct Page7237 {

  @Provide('pageInfos') pageInfos: NavPathStack = new NavPathStack()

  @Builder

  PagesMap(name: string) {

    if (name == 'Page01') {

      Page01()

    } else if (name == 'Dialog01') {

      Dialog011()

    }else if (name == 'Page02') {

      Page02()

    }

  }

  build() {

    Navigation(this.pageInfos) {

      Button('push Page01')

        .width('80%')

        .onClick(() => {

          this.pageInfos.pushPathByName('Page01', '');

        })

    }

    .mode(NavigationMode.Stack)

    .titleMode(NavigationTitleMode.Mini)

    .title('主页')

    .navDestination(this.PagesMap)

  }

}

在HarmonyOS鸿蒙Next中,自定义弹窗(CustomDialog)与NavDestination页面跳转的结合使用时,确实可能会遇到自定义弹窗压在NavDestination页面上的问题。这通常是由于弹窗的显示优先级高于其他组件导致的。

要解决这个问题,可以考虑以下几种方法:

  1. 调整弹窗的显示逻辑:确保在跳转到新的NavDestination页面时,自定义弹窗能够被正确关闭或隐藏。可以通过在页面跳转前调用弹窗控制器的关闭方法来实现。
  2. 使用Stack布局:将所有弹窗统一管理在一个Stack布局中,通过状态变量控制弹窗的显示与隐藏。这样可以在需要时动态地展示或隐藏弹窗,而不影响其他页面的正常显示。
  3. 检查弹窗的属性设置:确保自定义弹窗的alignment等属性设置正确,避免弹窗出现在不期望的位置。

如果上述方法仍无法解决问题,建议检查自定义弹窗和NavDestination页面的具体实现代码,确保没有逻辑错误或属性设置不当的情况。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部