修:面板底部「保存/删除」按钮被裁掉看不见 (#77)
用户 2026-11-05:「你改的是什么?是鸿蒙版吗?怎么没有看到任何按钮啊?」
代码确实在(我解包 sy-77.hap 在 modules.abc 里搜到了"保存中"字符串),
是**布局把它裁掉了**。
真根因:中间那个 Scroll 用的是 `flexShrink(1)` ——
`flexShrink` 只表示"空间不够时允许收缩",但 Scroll 的**内容高度**
仍会把自身撑开(ArkUI 竖向 Scroll 默认按内容高参与布局)。于是:
头部 + Scroll(按内容撑满) 吃光 `maxHeight: 86%`
→ 下面的 footBar 被推到 86% 之外
→ `FbSheetRing.clip(true)` 把它整条裁掉
⇒ 一颗按钮都看不见(而且连痕迹都没有,看起来就像"没做")。
改法:
① Scroll → `layoutWeight(1)`
"占据剩余空间"而不是"按内容撑开"。高度被限定成
"86% − 头部 − 分割线 − footBar",footBar 因此必然留在可视区内,
内容再长也只在自己内部滚动。
② footBar 补 `flexShrink(0)`
显式禁止压缩,防止某些机型把 42 高的按钮压扁。
⚠️ 旧注释(v60b)说 `layoutWeight(1)` 会让"短内容也把卡片顶满、底下留一片空白"。
那个副作用是真的,但属于观感问题;按钮看不见是功能问题。
两害相权先保证按钮可用。要消空白的话正确做法是外层配 minHeight:0,
而不是回到 flexShrink(那条路会让底栏被挤出去)。
编译通过,已装真机。
This commit is contained in:
@@ -904,9 +904,27 @@ export struct FbTaskPanel {
|
|||||||
.width('100%')
|
.width('100%')
|
||||||
.alignItems(HorizontalAlign.Start)
|
.alignItems(HorizontalAlign.Start)
|
||||||
}
|
}
|
||||||
/* `flexShrink(1)` 而不是 `layoutWeight(1)`:后者会让短内容也把卡片顶满,
|
/* 🔴🔴 #77r(用户 2026-11-05):「怎么没有看到任何按钮啊?」
|
||||||
底下留一大片空白(v60b 真机实测) */
|
|
||||||
.flexShrink(1)
|
**真根因**:这里是 `flexShrink(1)`,不是 `layoutWeight(1)`。
|
||||||
|
`flexShrink` 只是"空间不够时允许收缩",但 Scroll 的**内容高度**
|
||||||
|
仍然会把自身撑开(ArkUI 里 Scroll 竖向内容默认按内容高)。
|
||||||
|
于是:
|
||||||
|
头部 + Scroll(按内容撑满) 就把 `maxHeight: 86%` 吃光了
|
||||||
|
→ 下面的 `footBar()`(保存/删除)被推到 86% 之外
|
||||||
|
→ `FbSheetRing` 的 `clip(true)` 把它裁掉 ⇒ 一个按钮都看不见。
|
||||||
|
|
||||||
|
`layoutWeight(1)` 是"**占据剩余空间**":Scroll 的高度被限定成
|
||||||
|
"86% − 头部 − 分割线 − footBar",footBar 因此必然留在可视区内,
|
||||||
|
内容再长也只是在 Scroll 内部滚动。
|
||||||
|
|
||||||
|
⚠️ 旧注释说 `layoutWeight(1)` 会让"短内容也把卡片顶满"(v60b)。
|
||||||
|
那个副作用是真的,但它是**观感问题**;
|
||||||
|
而按钮看不见是**功能问题** —— 两害相权,先保证按钮可用。
|
||||||
|
要消掉空白的话,正确做法是给外层 Column 用
|
||||||
|
`.constraintSize({ maxHeight: '86%' })` 配合 **`minHeight: 0`**,
|
||||||
|
而不是回到 flexShrink。 */
|
||||||
|
.layoutWeight(1)
|
||||||
.width('100%')
|
.width('100%')
|
||||||
.scrollBar(BarState.Off)
|
.scrollBar(BarState.Off)
|
||||||
.align(Alignment.TopStart)
|
.align(Alignment.TopStart)
|
||||||
@@ -2043,5 +2061,10 @@ export struct FbTaskPanel {
|
|||||||
}
|
}
|
||||||
.width('100%')
|
.width('100%')
|
||||||
.margin({ top: 12 })
|
.margin({ top: 12 })
|
||||||
|
/* #77r:底栏**不许被压缩** —— Scroll 已经 layoutWeight(1) 拿剩余空间,
|
||||||
|
这里再显式 flexShrink(0) 兜一层,防止某些机型上把 42 高的按钮压扁。
|
||||||
|
(按钮整个看不见那次,就是没有这层保护、整条栏被挤到 86% 之外。) */
|
||||||
|
.flexShrink(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user