HarmonyOS鸿蒙Next中关于Navigation内部组件被裁切问题的解决方案

HarmonyOS鸿蒙Next中关于Navigation内部组件被裁切问题的解决方案 具体表现及条件如下:

1.内部所有组件高度宽度均设置为(‘100%’)或不设置,但里面的list组件就是无法占满屏幕,底部被空出

2.将NavDestination的高度强行设置为极端值(如1000),发现正常覆盖了,上方没有遮挡

3.通过ArkUI Inspector查看发现是NavDestination没有占满屏幕

4.没有设置Navigation层的标题(title属性)

cke_25110.png cke_26211.jpeg


解决方案比较奇怪,你需要在Navigation层添加hideTitleBar(true)属性

这很反常识,因为如果是底部空出来,那造成影响的应该是工具栏组件(ToolBar),但是事实上你隐藏ToolBar根本解决不了

我猜测是因为标题栏本身在开启时,索取的空间是固定的,无论你有没有写标题,所以就导致当你没有定义标题时,空间仍然被占用但里面没有任何元素,所以他就缩起来了,能留给下一层NavDestination的空间也就小了,因为Navigation默认向顶部对齐,就导致底下空出来了


以上内容似乎在文档中都没有提及,所以还是挺坑的,我被困扰了一整天才找到解决方案,遂发此贴,希望能帮到各位


更多关于HarmonyOS鸿蒙Next中关于Navigation内部组件被裁切问题的解决方案的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

Navigation+NavDestination, 好像也没有问题:

@Entry
@Component
struct Index {
        private arr: string[] = ['Item 0', 'Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5', 'Item 6', 'Item 7', 'Item 8', 'Item 9', 'Item 10'];

        build() {
                Navigation() {
                        NavDestination() {
                                List({ space: 0 }) {
                                        ForEach(this.arr, (item: string) => {
                                                ListItem() {
                                                        Text(item)
                                                                .width('100%')
                                                                .height(100)
                                                                .fontSize(16)
                                                                .textAlign(TextAlign.Center)
                                                                .backgroundColor(0xFFFFFF)
                                                }
                                                .border({ width: 1, color: Color.Green })
                                        }, (item: string) => item)
                                }
                                .height("100%")
                                .width('100%')
                                .border({ width: 1, color: Color.Red })

                        }.height("100%")
                        .width('100%')
                        .border({ width: 1, color: Color.Blue })
                }
                .height('100%')
                .width('100%')
                // .title("如何自定义蒙层")
                .mode(NavigationMode.Stack)
                .titleMode(NavigationTitleMode.Mini)
                // .hideBackButton(true)
        }
}

cke_152.png

更多关于HarmonyOS鸿蒙Next中关于Navigation内部组件被裁切问题的解决方案的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


没发现你说的问题

@Entry
@Component
struct Index {
    private arr: string[] = ['Item 0', 'Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5', 'Item 6', 'Item 7', 'Item 8', 'Item 9', 'Item 10'];

    build() {
        Navigation() {
            List({ space: 0 }) {
                ForEach(this.arr, (item: string) => {
                    ListItem() {
                        Text(item)
                            .width('100%')
                            .height(100)
                            .fontSize(16)
                            .textAlign(TextAlign.Center)
                            .backgroundColor(0xFFFFFF)
                    }
                    .border({ width: 1, color: Color.Green })
                }, (item: string) => item)
            }
            .height("100%")
            .width('100%')
            .border({ width: 1, color: Color.Red })
        }
        .height('100%')
        .width('100%')
        // .title("如何自定义蒙层")
        .mode(NavigationMode.Stack)
        .titleMode(NavigationTitleMode.Mini)
        .hideBackButton(true)
    }
}

cke_730.png

朋友你没写NavDestination,我文章里写的是NavDestination无法占满,

在HarmonyOS Next中,Navigation内部组件被裁切时,可在子组件根节点添加.clip(false)禁用裁剪,或为子组件设置.width('100%').height('100%')使其填满容器。若仍无效,尝试将子组件置于Stack内并设置对齐方式,确保布局不溢出。

Navigation 组件默认会预留标题栏区域,即使未显式设置 title 属性,该区域依然会占据固定高度。这导致 NavDestination 可用高度缩减,若其内部组件高度为百分比或自适应,便会出现底部空白。设置 hideTitleBar(true) 可移除这一预留区域,使内容填满可用空间。此行为与 ToolBar 无关,属于 Navigation 的固有布局策略,但当前文档中未明确说明,容易产生迷惑。

回到顶部