Skip to content

[Bug] 移动端阅读设置面板内容溢出:小屏/大字号/注音展开时顶部设置行被截断且无法滚动 / Reader settings panel overflows on small screens with no scroll #381

@chy5301

Description

@chy5301

Type

Bug

现象

移动端「阅读设置」面板(ReaderSettingsPanel)在小屏设备、系统辅助功能字号放大、或注音(Ruby)行展开等场景下,顶部设置行(字号、行高等)被顶出屏幕且无法滚动找回,显示不全。

复现步骤

  1. 移动端打开任意书籍进入阅读器;
  2. 系统设置 → 辅助功能 → 将字号调大(或使用小屏设备如 iPhone SE);
  3. 打开阅读设置面板,向下滚动到「注音」并下载拼音词典、展开模式选择行;
  4. 观察:面板内容总高超过屏幕可用空间,顶部「字号」「行高」等设置行被截断,且面板内容区域无法滚动,无法操作被截断的设置。

根因分析

ReaderSettingsPanel.tsx 的布局存在两处高度约束缺失:

  1. 外层 bottomSheet 容器无 maxHeight

    • reader-sheet-styles.ts:19bottomSheet 样式只有 backgroundColorborderTopLeftRadiuspadding没有 maxHeight
    • 内容少时靠 Modal 从底部弹出自然贴底,内容多时 sheet 会向屏幕顶部无限延伸。
  2. 内容 ScrollView 无高度约束,实际不滚动

    • ReaderSettingsPanel.tsx:70<ScrollView showsVerticalScrollIndicator={false}> —— 没有任何 style、没有 maxHeight
    • ScrollView 在 Flexbox 中没有固定/受限高度时,内容全部展开,ScrollView 退化为普通 View,滚动功能失效

对照组:ReaderTOCPanel.tsx 是正确模式:

  • 容器 maxHeight: SCREEN_HEIGHT * 0.7(73 行);
  • 内容 <ScrollView style={s.sheetScroll}>(133/149 行),sheetScroll = { maxHeight: SCREEN_HEIGHT * 0.5 }reader-sheet-styles.ts:36)。

现成样式 s.sheetScroll 已存在于样式表但 ReaderSettingsPanel 没有使用。

可能的修复方向(仅建议)

ReaderSettingsPanel.tsx:70 的内容 ScrollView 加上 style={s.sheetScroll},与 ReaderTOCPanel 对齐:

<ScrollView showsVerticalScrollIndicator={false} style={s.sheetScroll}>

复用现成样式(maxHeight: SCREEN_HEIGHT * 0.5),零新增样式,maxHeight 仅为上限——内容少时仍贴底,无副作用。

设备

  • Platform: Mobile (Expo / React Native)
  • App: v1.3.2
  • 说明:基于源码核实(main @ a7f30ce),非真机复现。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions