[iOS] A scroll view above the main list stops `minimizeBehavior="onScrollDown"`.
維護者通常 2 天內回覆
評估
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 新手友好度
- 18/100
- Issue 類型
- 缺陷
- 描述清晰度
- 描述清楚
- 活躍度
- 停滯
- 技術堆疊
- ios, react-native, typescript
- 領域
- mobile
研究方向
The bug is in how the native iOS tab bar picks its minimize-on-scroll scroll view when a horizontal ScrollView sits above a vertical one, so start with the minimizeBehavior prop on Tab.Navigator and the native iOS scroll-view handling it reaches. Reproduce with the sample using SHOW_HORIZONTAL_LIST true and false, and check that a finger scroll minimizes the bar only when the horizontal list is removed. Pull request #618 is already open against this issue, so review it before starting any separate fix.
由索引模型根據 Issue 內容生成。
描述
Before submitting a new issue
- I tested using the latest version of the library, as the bug might be already fixed.
- I tested using a supported version of react native.
- I checked for possible duplicate issues, with possible answers.
Bug summary
Some tabs have a second scroll view before the main list. On iOS 26 and later, scrolling down in such a tab does not minimize the tab bar. An example is a short horizontal list of chips above a vertical list. The main list scrolls, but the tab bar stays full size.
UIKit picks the scroll view that drives minimizing from the first subview of each view, repeated down the tree. In this layout, the first scroll view on that path is the horizontal list, so vertical scrolling of the main list has no effect.
Library version
1.5.0
Environment info
System:
OS: macOS 27.0.1
Shell: 5.9 - /bin/zsh
Binaries:
Node: 24.20.0
Yarn: 1.22.22
npm: 11.19.0
Watchman: 2026.07.27.00
Managers:
CocoaPods: 1.17.0
SDKs:
iOS SDK:
Platforms: DriverKit 27.0, iOS 27.1, macOS 27.0, tvOS 27.0, visionOS 27.0, watchOS 27.0
IDEs:
Xcode: 27.1/27A9275
npmPackages:
expo: 58.0.16
react: 19.3.0
react-native: 0.88.0
react-native-bottom-tabs: 1.5.0
"@bottom-tabs/react-navigation": 1.5.0
"@react-navigation/native": 7.5.1
"@react-navigation/native-stack": 7.21.0
react-native-screens: 4.30.0
react-native-safe-area-context: 5.10.1
"@shopify/flash-list": 2.3.2
iOS:
hermesEnabled: true
newArchEnabled: true
Device:
iPhone 17 Pro simulator, iOS 26.5
Steps to reproduce
- Create a tab navigator with
minimizeBehavior="onScrollDown". - In the first tab, render a horizontal
ScrollViewand, below it, a verticalScrollView,FlatList, orFlashList. - Scroll down in the vertical list with a finger. A scroll from code (
scrollTo) never minimizes the bar.
function HomeScreen() {
return (
<View style={{ flex: 1 }}>
<ScrollView horizontal style={{ flexGrow: 0 }}>
{/* chips */}
</ScrollView>
<ScrollView contentInsetAdjustmentBehavior="automatic">
{/* long content */}
</ScrollView>
</View>
);
}
If you remove the horizontal list, the tab bar minimizes.
| Without the horizontal list: the tab bar minimizes | With the horizontal list: the tab bar stays full size |
|---|---|
| https://github.com/user-attachments/assets/c7af0c77-bf7d-45c2-9a3f-5c340e7ad507 | https://github.com/user-attachments/assets/2f84e03b-3f2c-40d8-a046-37736c012055 |
Reproducible sample code
import { NavigationContainer } from '@react-navigation/native';
import { createNativeBottomTabNavigator } from '@bottom-tabs/react-navigation';
import { ScrollView, Text, View } from 'react-native';
const SHOW_HORIZONTAL_LIST = true;
const Tab = createNativeBottomTabNavigator();
function HomeScreen() {
return (
<View style={{ flex: 1 }}>
{SHOW_HORIZONTAL_LIST && (
<ScrollView horizontal style={{ flexGrow: 0, marginTop: 60 }}>
{Array.from({ length: 12 }, (_, i) => (
<Text key={i} style={{ padding: 16 }}>
Chip {i + 1}
</Text>
))}
</ScrollView>
)}
<ScrollView contentInsetAdjustmentBehavior="automatic">
{Array.from({ length: 50 }, (_, i) => (
<Text key={i} style={{ padding: 20 }}>
Item {i + 1}
</Text>
))}
</ScrollView>
</View>
);
}
function ProfileScreen() {
return <View style={{ flex: 1 }} />;
}
export default function App() {
return (
<NavigationContainer>
<Tab.Navigator minimizeBehavior="onScrollDown">
<Tab.Screen
name="Home"
component={HomeScreen}
options={{ tabBarIcon: () => ({ sfSymbol: 'house.fill' }) }}
/>
<Tab.Screen
name="Profile"
component={ProfileScreen}
options={{ tabBarIcon: () => ({ sfSymbol: 'person.fill' }) }}
/>
</Tab.Navigator>
</NavigationContainer>
);
}
- 主要語言
- TypeScript
- 星號
- 1.5k
- 分支
- 112
- 平均合併
- 2 天 33 分鐘
- 30 天內合併 PR
- 14
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
callstack/react-native-bottom-tabs 的其他 Issue
-
[iOS] Tabs don't fire tabLongPress event on iOS 26可能已有人在做 @thiagobrez 於 49 天前認領。 未關閉bug
難度 4/5 3-5 天 新手友好度 48/100
callstack/react-native-bottom-tabs#573 ·
維護者通常 2 天內回覆
-
iOS: allow opting out of the private-CoreSVG SVG decoder (exclude_files by default, or an opt-in flag)可能已有人在做 @oleksandrzavarzin-callstack 於 16 天前認領。 未關閉
難度 3/5 1-2 天 新手友好度 68/100
callstack/react-native-bottom-tabs#565 ·
維護者通常 2 天內回覆
-
Tab icon size is hard-coded to 27x27pt with no way to override it可能已有人在做 @teddyxfire1992 於 12 天前認領。 未關閉
難度 4/5 3-5 天 新手友好度 48/100
callstack/react-native-bottom-tabs#561 · 1 則留言 · 2 個 reaction ·
維護者通常 2 天內回覆
-
White flash when lazily loading a tab on iOS 27可能已有人在做 @thiagobrez 於 73 天前認領。 未關閉bug
難度 4/5 3-5 天 新手友好度 45/100
callstack/react-native-bottom-tabs#547 · 2 個 reaction ·
維護者通常 2 天內回覆
-
disablePageAnimations causing visual glitch on iOS 26+可能重新可做 關聯的 PR 已關閉且未合併。 未關閉bug iOS
難度 3/5 1-2 天 新手友好度 55/100
callstack/react-native-bottom-tabs#531 · 1 則留言 ·
維護者通常 2 天內回覆
查看 callstack/react-native-bottom-tabs 的全部 Issue
相似的 Issue
-
status: needs triage
難度 1/5 1 小時以內 新手友好度 68/100
mastra-ai/mastra#29706 · 1 則留言 ·
維護者通常 1 天內回覆
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
難度 1/5 1 小時以內 新手友好度 85/100
lingdojo/kana-dojo#33802 · 1 則留言 · 5 個 reaction ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 78/100
cloudflare/workerd#8290 ·
維護者通常 1 天內回覆
-
area: build-and-ci possible-duplicate S3: minor
難度 2/5 1-3 小時 新手友好度 67/100
manaflow-ai/cmux#38889 · 1 則留言 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 77/100
ValentinH/react-easy-crop#670 ·