Type
Bug
现象
移动端「阅读设置」面板(ReaderSettingsPanel)在小屏设备、系统辅助功能字号放大、或注音(Ruby)行展开等场景下,顶部设置行(字号、行高等)被顶出屏幕且无法滚动找回,显示不全。
复现步骤
- 移动端打开任意书籍进入阅读器;
- 系统设置 → 辅助功能 → 将字号调大(或使用小屏设备如 iPhone SE);
- 打开阅读设置面板,向下滚动到「注音」并下载拼音词典、展开模式选择行;
- 观察:面板内容总高超过屏幕可用空间,顶部「字号」「行高」等设置行被截断,且面板内容区域无法滚动,无法操作被截断的设置。
根因分析
ReaderSettingsPanel.tsx 的布局存在两处高度约束缺失:
-
外层 bottomSheet 容器无 maxHeight:
reader-sheet-styles.ts:19 的 bottomSheet 样式只有 backgroundColor、borderTopLeftRadius、padding,没有 maxHeight。
- 内容少时靠
Modal 从底部弹出自然贴底,内容多时 sheet 会向屏幕顶部无限延伸。
-
内容 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),非真机复现。
Type
Bug
现象
移动端「阅读设置」面板(
ReaderSettingsPanel)在小屏设备、系统辅助功能字号放大、或注音(Ruby)行展开等场景下,顶部设置行(字号、行高等)被顶出屏幕且无法滚动找回,显示不全。复现步骤
根因分析
ReaderSettingsPanel.tsx的布局存在两处高度约束缺失:外层
bottomSheet容器无maxHeight:reader-sheet-styles.ts:19的bottomSheet样式只有backgroundColor、borderTopLeftRadius、padding,没有maxHeight。Modal从底部弹出自然贴底,内容多时 sheet 会向屏幕顶部无限延伸。内容
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对齐:复用现成样式(
maxHeight: SCREEN_HEIGHT * 0.5),零新增样式,maxHeight仅为上限——内容少时仍贴底,无副作用。设备