HarmonyOS 鸿蒙Next中仓颉突破安全区域时为什么固定高度和百分比得到的结果不一样?

HarmonyOS 鸿蒙Next中仓颉突破安全区域时为什么固定高度和百分比得到的结果不一样? 1、使用固定高度时无法突破安全区域

@Entry
@Component
class TEST_VIEW {
    func build() {
        Stack(Alignment.BottomStart) {

            Column()
            .width(100.percent)
            .height(100.vp)
            .backgroundColor(Color.RED)
            .expandSafeArea(types: [SafeAreaType.SYSTEM, SafeAreaType.CUTOUT], edges: [SafeAreaEdge.BOTTOM,SafeAreaEdge.TOP])

        }
        .width(100.percent)
        .height(100.percent)
        .backgroundColor(Color.BLUE)
        .expandSafeArea(types: [SafeAreaType.SYSTEM], edges: [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
    }
}

cke_22288.png

2、使用百分比高度时却可以突破安全区域

@Entry
@Component
class TEST_VIEW {
    func build() {
        Stack(Alignment.BottomStart) {

            Column()
            .width(100.percent)
            .height(10.percent)
            .backgroundColor(Color.RED)
            .expandSafeArea(types: [SafeAreaType.SYSTEM, SafeAreaType.CUTOUT], edges: [SafeAreaEdge.BOTTOM,SafeAreaEdge.TOP])

        }
        .width(100.percent)
        .height(100.percent)
        .backgroundColor(Color.BLUE)
        .expandSafeArea(types: [SafeAreaType.SYSTEM], edges: [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
    }
}

cke_26857.png


更多关于HarmonyOS 鸿蒙Next中仓颉突破安全区域时为什么固定高度和百分比得到的结果不一样?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

image

固定高度会固化布局计算逻辑,导致expandSafeArea仅能影响绘制区域偏移(如内容上移),但无法改变组件实际占位尺寸。而百分比高度通过动态继承父容器约束,使得安全区域扩展能够直接影响布局计算,实现真正的尺寸突破

文档地址

https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-universal-attributes-expand-safe-area#expandsafearea

更多关于HarmonyOS 鸿蒙Next中仓颉突破安全区域时为什么固定高度和百分比得到的结果不一样?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,仓颉组件突破安全区域时,固定高度和百分比表现不同是因为布局计算方式差异。固定高度直接采用设定值,不考虑安全区域限制;百分比高度基于父容器安全区域计算,会受到系统安全区域限制。当组件突破安全区域时,百分比值仍会参考安全区域约束,而固定高度会完全忽略该约束。这种差异是鸿蒙系统为保障不同设备显示一致性而设计的布局机制。

在HarmonyOS Next中,固定高度(100vp)和百分比高度(10%)在突破安全区域时表现不同,这是因为它们的计算方式有本质区别:

  1. 固定高度(100vp):
  • vp是虚拟像素单位,基于屏幕物理像素密度转换
  • 设置固定高度时,系统会严格限制在安全区域内
  • 即使使用expandSafeArea,系统仍会优先保证内容不被遮挡
  1. 百分比高度(10%):
  • 百分比是相对于父容器计算的高度
  • 当父容器通过expandSafeArea突破了安全区域时
  • 子元素的百分比高度会基于突破后的新区域计算
  • 因此能显示出突破安全区域的效果

建议解决方案: 若需要固定高度突破安全区域,可以:

  1. 先获取安全区域insets值
  2. 然后手动计算需要的高度(安全区域高度+额外高度)
  3. 最后设置这个计算后的固定高度值

这种差异是设计使然,百分比布局能更好地响应父容器的尺寸变化。

回到顶部