From 0ca28d24ff1cb52d2208c6cbcf1b33d13fbdc18b Mon Sep 17 00:00:00 2001 From: AskaEth Date: Tue, 10 Nov 2026 15:54:05 +0800 Subject: [PATCH] =?UTF-8?q?fix(app-iced):=20=E7=89=88=E6=9C=AC=E8=A1=8C?= =?UTF-8?q?=E8=8A=82=E8=B7=9D/=E5=88=97=E8=A1=A8=20chrome=20=E6=A0=87?= =?UTF-8?q?=E5=AE=9A=E9=87=8D=E7=AE=97=EF=BC=8844/97=EF=BC=89+=20=E4=B8=AD?= =?UTF-8?q?=E6=80=A7=E8=AF=B4=E6=98=8E=E6=8C=AA=E5=88=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E4=B9=8B=E5=90=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 三审给了独立量测,两处都按它的数字收敛: 1. `ROW_PITCH` 278/6=46.33 → **44.0**(278 里含列表与面板之间的 8px `Space::X2`); `LIST_CHROME` 93 → **97**(列顶 156 → 列表顶 253)。1180×760 分隔线 492 → **481**、 列表视口 **220px = 5 整行**;1180×900 加测 = 308px = 7 整行,三审报的 900 高残影不复发。 2. S7 钉页脚引入的新问题:面板上半块的滚动切点压在字形上(宽窗切「加载器版本」标签上沿、 窄窗把 chips 切成 4px 条)。把中性说明从菜单**之前**移到**之后**——它两行高,排前面正是把 唯一的加载器专属控件顶出首屏的元凶。 顺带纠正一处文档:面板结构不是「头部 + 可滚上半 + 钉页脚」,head(版本 id + 安装按钮)是上半块 的第一个子项、**安装按钮也在滚动区**,只有实例名是钉死的。 --- .../src/pages/download/options/view.rs | 23 +++++++++++-------- .../app-iced/src/pages/download/rows/tail.rs | 14 ++++++----- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/crates/app-iced/src/pages/download/options/view.rs b/crates/app-iced/src/pages/download/options/view.rs index 260aff4..4b3fd6f 100644 --- a/crates/app-iced/src/pages/download/options/view.rs +++ b/crates/app-iced/src/pages/download/options/view.rs @@ -108,16 +108,6 @@ pub(crate) fn section<'a>( // 中性说明(M222):只解释这一页能装到哪一层,不套错误色、不影响确认键。 // 换行由 iced 的文本布局负责,长句不会横向溢出;但**视觉验收仍需截图确认**(D30)。 - if let Some(note) = &options.note { - body = body.push(frame::text_role( - ui, - TypeRole::BodySmall, - false, - note.as_str(), - ui.color(Role::OnSurfaceVariant), - )); - } - // 「加载器版本」这一段只在**真该有列表**时出现:原版没有、静态不兼容没有(原因在下面那行)、 // 取不到也没有(同样在原因行)。留一个空标题只会让人以为界面缺了一块。 if show_versions(options) { @@ -131,6 +121,19 @@ pub(crate) fn section<'a>( body = body.push(version_list(ui, catalog, options)); } + // 中性说明排在**版本菜单之后**(D30 三审 S7-clip):说明两行高,排在菜单前面会把 + // 「加载器版本」这个本页唯一的加载器专属控件顶出首屏,而面板上半块是滚动区,切点会落在 + // 字形上。挪到菜单后面之后 1180×760 首屏能装下 head + chips + 标签 + 菜单,切点不再切字。 + if let Some(note) = &options.note { + body = body.push(frame::text_role( + ui, + TypeRole::BodySmall, + false, + note.as_str(), + ui.color(Role::OnSurfaceVariant), + )); + } + if let Some(problem) = &options.problem { body = body.push(frame::text_role( ui, diff --git a/crates/app-iced/src/pages/download/rows/tail.rs b/crates/app-iced/src/pages/download/rows/tail.rs index 37cc802..8bff2f2 100644 --- a/crates/app-iced/src/pages/download/rows/tail.rs +++ b/crates/app-iced/src/pages/download/rows/tail.rs @@ -58,18 +58,20 @@ impl TailShare { } } -/// 版本行的**实测节距**(D30:`04` 图列表 278px / 6 行 = 46.33px)。 +/// 版本行的**实测节距**(D30 三审:`04` 图行内下载图标的行首 265/309/353/397/441/485, +/// 节距恰 **44.0**;首行选中高亮矩形 253–296 也是 44px)。 /// /// 列表是 `Fill + scrollable` 时,视口高度不是节距整数倍就会切在某一行中间——D30 r2 实测 /// `01` 是 245px(5.3 行),英文态露出 6px 竖干、中文态露出「预览版」上半截。三栏档的 /// 「列表与面板对半分」那一档现在按整行取高([`whole_rows`]),底缘落在行边界上。 -pub(crate) const ROW_PITCH: f32 = 278.0 / 6.0; +pub(crate) const ROW_PITCH: f32 = 44.0; -/// 列表列内部、列表以外要扣掉的固定占位(搜索条 + 分隔线 + 表头 + 列间距)。 +/// 列表以外、列内要扣掉的固定占位(**列顶 156 → 列表顶 253**,D30 三审实测 = 97)。 /// -/// D30 标定:1180×760 的正文列高([`frame::body_height`](crate::pages::frame::body_height)) -/// 扣掉它再对半分,正好是 5 整行。**改搜索条 / 表头高度时要同步这个数。** -pub(crate) const LIST_CHROME: f32 = 93.0; +/// 1180×760:正文列 580 ⇒ floor((580−97)/2 / 44) × 44 = **220px = 5 整行**,分隔线落在 481。 +/// 1180×900:floor((720−97)/2 / 44) × 44 = **308px = 7 整行**(三审在 900 高实测过:旧标定 +/// 会在 y529–530 复发残影,新标定不复发)。**改搜索条 / 表头高度时要同步这个数。** +pub(crate) const LIST_CHROME: f32 = 97.0; /// 正文列高度 → 列表视口的**整行高度**(只给三栏档的 Shared 分支用)。 #[must_use]