v64b:修真机弹层"点了没反应"(根容器 Column → Stack)+ 日期行热区

四个日期/选择类浮层在真机上**完全打不开**:编译无告警、`aboutToAppear` 照常调用、
`dumpLayout` 里连弹层一个节点都看不到、点它会"穿透"到底下的列表。

根因(逐层二分定位):根容器写成 `Column` 且里面**先排一个整高遮罩**
(`Column().width('100%').height('100%').backgroundColor(FB_MASK)`)再排卡片。
`Column` 是**线性**布局 ⇒ 遮罩占满整高后,卡片被排到屏幕**外面**。
⇒ 全屏遮罩与卡片要"叠"(`Stack`),不能"排"(`Column`)。

改动:
- FbDateTimeField / FbCinemaPickSheet / FbPersonPickSheet:根容器改
  `Stack({ alignContent: Alignment.Center })`,遮罩与卡片作并列子项叠放;
  去掉原先用于"居中卡片"的 `justifyContent(FlexAlign.Center)`(Stack 已对齐)。
- FbDateTimeField:「日期行」的 `.onClick` 由内层 `layoutWeight(1)` 的 Row
  挪到**根 Row** —— 挂内层时那一行会被表单所在的**两列容器**盖住,
  点击穿透到底下的观影列表(表现为"点日期行,列表反而响应了")。
- FbSheetClose:`onClose` 由 `@Param` 改 `@Event`(语义归位;实测 `@Param`
  声明回调**并不会失效**,✕ 一直是能点的 —— 这不是本轮 bug 的根因,别混为一谈)。

验证:
- 构建 BUILD SUCCESSFUL;
- 静态守卫 644/0(新增 8 条:三个组件的 Stack 叠放 + 整高遮罩非空转 +
  全项目无"根 Column 先排整高遮罩"坏形态 + 日期行热区在根 Row);
- 守卫反向验证 92/0(新增 6 条注入,含把根 Stack 改回 Column、删遮罩、
  热区挪回内层,逐条证明断言真会红)。
This commit is contained in:
2026-10-20 08:55:27 +08:00
parent 8146aab1a7
commit 3b7238a418
4 changed files with 53 additions and 16 deletions
@@ -80,8 +80,12 @@ export struct FbCinemaPickSheet {
}
build() {
// 整屏遮罩 + 居中卡片(与全应用浮层同一形态)
Column() {
/* 🔴🔴 必须是 `Stack`,**不能**是 `Column`(2026-10-20 真机实测的真 bug)。
`Column` 是**线性**布局:全屏遮罩(100% 高)会占满整高,
卡片被排到它**下面** ⇒ 落到屏幕之外 ⇒ 弹层"点了没反应"。
症状:编译无告警、dumpLayout 里看不到弹层任何节点、点击会穿透到下层。
⇒ **全屏遮罩与卡片要"叠"(Stack),不能"排"(Column)**。 */
Stack({ alignContent: Alignment.Center }) {
Column()
.width('100%')
.height('100%')
@@ -181,7 +185,6 @@ export struct FbCinemaPickSheet {
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
.hitTestBehavior(HitTestMode.Transparent)
}