HarmonyOS 鸿蒙Next 如何将 tab 工具条遮罩住?

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

HarmonyOS 鸿蒙Next 如何将 tab 工具条遮罩住?

目前的结构是Tab里面有Navigation,然后在Navigation中的主视图中添加遮罩。 虽然高度设置了100%,但底下的tab栏没有遮罩住,想问下如何将tab栏遮罩住?

2 回复

蒙层显示时改变tab栏的背景以及透明度

[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
  [@State](/user/State) visible: boolean = false
  [@Builder](/user/Builder) tabBuilder() {
    Column(){
      Text("首页")
    }.width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
  build() {
    NavDestination() {
      Stack({ alignContent: Alignment.Center }) {
        Tabs({barPosition: BarPosition.End}) {
          TabContent() {
            Row() {
              Column() {
                Button("选择组织").onClick(() => {
                  this.visible = !this.visible;
                })
              }
              .height('100%')
              .width('100%')
              .justifyContent(FlexAlign.Start)
            }.height('100%')
          }.tabBar(this.tabBuilder())
        }
        CXWDropdownListView({visible: this.visible}).visibility(this.visible ? Visibility.Visible : Visibility.Hidden)
      }
    }
  }
}
export class CXWEnterpriseInfo {
  identifier: string;
  name: string;
  constructor(identifier: string, name: string) {
    this.identifier = identifier;
    this.name = name;
  }
}
[@Component](/user/Component)
struct CXWDropdownListView {
  [@Link](/user/Link) visible: boolean;
  private showMaxCount = 6;
  private itemHeight = 60;
  private dataSource = [new CXWEnterpriseInfo("1", "组织1"), new CXWEnterpriseInfo("2", "组织2"),
    new CXWEnterpriseInfo("3", "组织3"), new CXWEnterpriseInfo("4", "组织4"),]
  build() {
    Column() {
      List() {
        ForEach(this.dataSource, (info: CXWEnterpriseInfo, index: number) => {
          ListItem() {
            CXWDropdownEnterpriseItem({name: info.name, selected: index == 1})
              .onClick(() => {
                this.hiddenDropdownListView();
              })
          }
        })
      }
      .height(this.dataSource.length > this.showMaxCount ? this.showMaxCount * this.itemHeight : this.dataSource.length * this.itemHeight)
      .backgroundColor(Color.White)
      Blank()
        .width('100%')
        .flexGrow(1)
        .backgroundColor(Color.Black)
        .opacity(0.4)
        .onClick(() => {
          this.hiddenDropdownListView();
        })
    }
    .width('100%')
    .height('100%')
  }
  hiddenDropdownListView() {
    this.visible = !this.visible;
  }
}
[@Component](/user/Component)
struct CXWDropdownEnterpriseItem {
  [@State](/user/State) selected: boolean = false;
  name: string = "";
  build() {
    Row() {
      Image('')
        .size({width: 16, height: 16})
        .margin({left: 16})
        .backgroundColor(Color.Black)
      Text(this.name)
        .fontSize(16)
        .backgroundColor(Color.Gray)
        .padding({left: 8})
        .flexGrow(1)
      Image('')
        .size({width: 16, height: 16})
        .margin({right: 16})
        .backgroundColor(Color.Orange)
        .visibility(this.selected ? Visibility.Visible : Visibility.Hidden)
    }
    .justifyContent(FlexAlign.SpaceBetween)
    .width('100%')
    .height('60')
  }
} 

更多关于HarmonyOS 鸿蒙Next 如何将 tab 工具条遮罩住?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对HarmonyOS 鸿蒙Next中将tab工具条遮罩住的问题,以下是一些可能的解决方法:

  1. 自定义Tab组件

    • 通过自定义TabBar的布局和样式,可以完全控制导航区的外观,从而实现对tab工具条的遮罩。
  2. 调整组件层级

    • 检查并调整Tab组件和其他相关组件的层级关系,确保Tab组件位于其他需要被遮罩内容的上层。
  3. 设置TabContent高度

    • 确保TabContent的高度设置正确,避免被tabBar遮挡。可以尝试设置TabContent或其子组件的固定高度,或者使用layoutWeight属性来分配高度。
  4. 利用避让机制

    • 如果问题是特定场景(如键盘弹起)导致的遮挡,可以利用HarmonyOS提供的避让机制,如expandSafeArea方法,来固定被遮挡内容的位置。

如果上述方法仍然无法解决问题,可能是由于特定的应用布局或系统配置导致的。此时,建议检查应用的布局代码和系统配置,确保没有遗漏或错误。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部