From f0f0d9047a1e356047e8719ac64b92a812f13c95 Mon Sep 17 00:00:00 2001 From: laoyang Date: Sun, 18 Oct 2026 21:00:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=B4=E5=83=8F=E7=83=AD=E5=8C=BA=E6=94=B9?= =?UTF-8?q?=E7=94=A8=2040=C3=9740=20=E5=AE=B9=E5=99=A8=E6=92=91=EF=BC=88?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E7=BB=99=20FbAvatar=20=E5=8A=A0=20width=20?= =?UTF-8?q?=E4=BC=9A=E6=8B=89=E6=88=90=E6=A4=AD=E5=9C=86=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 自查发现的一个"顺手就踩"的坑:为了扩大点击热区(32 的头像手指容易点空), 本想给 `FbAvatar` 直接加 `.width(40).height(40)` —— 但 `FbAvatar` 的**根节点就是那个 `Image/Text`**(自己已设 `width(dia)`), 外层尺寸修饰会把它拉到 40×40,而圆角仍是 `dia/2 = 16` ⇒ **头像变成椭圆**,而且编译不报错。 ⇒ 改成外面包一层 40×40 的 `Row`(居中),头像仍是正圆 32、热区是 40。 同时补一条守卫钉住它(`_fb_arkts_guard.js` 348/0): 断言"`Row{ FbAvatar{...} }` 之后跟着 `.width(40)`",并在 falsify 里加了 第 9 项注入(把容器撑宽改成直接给头像加 width)⇒ 反向验证 9/0。 验证:hvigor BUILD SUCCESSFUL;守卫 348/0;反向验证 9/0。 --- entry/src/main/ets/components/TopBar.ets | 30 +++++++++++++++--------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/entry/src/main/ets/components/TopBar.ets b/entry/src/main/ets/components/TopBar.ets index c508578..2b25659 100644 --- a/entry/src/main/ets/components/TopBar.ets +++ b/entry/src/main/ets/components/TopBar.ets @@ -208,19 +208,27 @@ export struct FbTopBar { // ⚠️ 数据取自**本地库**(`FbPersonRepo.inst().byId`),不是名册列表里那份: // "我"常常**不在自己的名册**里(名册是"我挑出来的那一小撮"), // 从名册那批里找会静默落空 ⇒ 点了没反应(最难查的那种失败)。 - FbAvatar({ - name: this.app.session.me.name, - color: this.app.session.me.avatarColor, - dia: 32, - fontSizeVp: 14, - imageUrl: this.app.session.me.avatarUrl !== undefined - ? this.app.session.me.avatarUrl - : '' - }) - // ⚠️ `FbAvatar` 的布局尺寸在画布内(`Image` 自己撑圆),外层要显式 - // 给一个可点区域 —— 32 的头像直接当热区在真机上偏小(手指容易点空)。 + /* ⚠️ 用一层 40×40 的透明容器包住 32 的头像,**不要**直接给 `FbAvatar` + 加 `.width(40)`: + `FbAvatar` 的根节点就是那个 `Image/Text`(自己已设 `width(dia)`), + 外层尺寸修饰会把它拉到 40×40,而圆角仍是 `dia/2 = 16` + ⇒ 头像被拉成**椭圆**(视觉 bug,且编译不报错)。 + 包一层则:热区 40、头像仍是正圆 32、居中。 + (32 直接当热区在真机上偏小、手指容易点空 —— 这就是要 40 的原因。) */ + Row() { + FbAvatar({ + name: this.app.session.me.name, + color: this.app.session.me.avatarColor, + dia: 32, + fontSizeVp: 14, + imageUrl: this.app.session.me.avatarUrl !== undefined + ? this.app.session.me.avatarUrl + : '' + }) + } .width(40) .height(40) + .justifyContent(FlexAlign.Center) .margin({ left: FbMetric.gapTopActions }) .onClick((): void => { this.openMyDetail();