[iOS] Animated Bug: Animations do not run correctly in React Navigation
还没有人认领这个 Issue。
- 主要语言
- C++
- 星标
- 127k
- 派生
- 25.3k
- 平均合并
- 1 天 23 小时
- 30 天内合并 PR
- 4
描述
Description
Hello!
I'm having some issues using the React Navigation library with the bottom tabs. I created a bottom tabs navigator, and I noticed that sometimes when I change the tab, the previous tab disappears and the focused tab doesn't show. This issue appears only when using animations for the tab switching. You can see in the reproduction example that I used "shift" animation.
I debugged the library "@react-navigation/bottom-tabs", and everything seems to be just fine, and I think the issue is in React Native, in the Animated API. The bottom tabs library animates an Animated.Value between -1 and 1, and then passes an interpolated value to the Screen. This interpolation seems to be broken.
I used version "7.15.9" of "@react-navigation/bottom-tabs".
You can find the code I'm talking about here: https://github.com/react-navigation/react-navigation/blob/f2ca954afa5a478de49489199444d7a5269df261/packages/bottom-tabs/src/views/BottomTabView.tsx#L296
Steps to reproduce
- Clone the reproducer app
- Install dependencies using "yarn"
- Start dev server
- Run the app from Xcode
- Swipe between the two tabs slow and fast many times, until you see the second tab won't render anything
React Native Version
0.84.1
Affected Platforms
Runtime - iOS
Output of npx @react-native-community/cli info
System:
OS: macOS 26.3.1
CPU: (14) arm64 Apple M3 Max
Memory: 4.64 GB / 36.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 22.13.1
path: /Users/george/.nvm/versions/node/v22.13.1/bin/node
Yarn:
version: 3.6.4
path: /Users/george/.nvm/versions/node/v22.13.1/bin/yarn
npm:
version: 10.9.2
path: /Users/george/.nvm/versions/node/v22.13.1/bin/npm
Watchman:
version: 2025.05.26.00
path: /opt/homebrew/bin/watchman
Managers:
CocoaPods:
version: 1.16.2
path: /Users/george/.rvm/gems/ruby-3.0.0/bin/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 25.0
- iOS 26.0
- macOS 26.0
- tvOS 26.0
- visionOS 26.0
- watchOS 26.0
Android SDK:
API Levels:
- "30"
- "31"
- "33"
- "34"
- "35"
- "36"
- "36"
Build Tools:
- 30.0.2
- 30.0.3
- 33.0.0
- 34.0.0
- 35.0.0
- 36.0.0
- 36.0.0
System Images:
- android-34 | Android TV ARM 64 v8a
- android-35 | ARM 64 v8a
- android-35 | Google Play ARM 64 v8a
- android-35 | Google Play Tablet ARM 64 v8a
- android-36 | Google Play ARM 64 v8a
- android-36 | Pre-Release 16 KB Page Size Google Play ARM 64 v8a
Android NDK: Not Found
IDEs:
Android Studio: 2025.3 AI-253.30387.90.2532.14935130
Xcode:
version: 26.0.1/17A400
path: /usr/bin/xcodebuild
Languages:
Java:
version: 17.0.13
path: /usr/bin/javac
Ruby:
version: 3.0.0
path: /Users/george/.rvm/rubies/ruby-3.0.0/bin/ruby
npmPackages:
"@react-native-community/cli":
installed: 20.1.0
wanted: 20.1.0
react:
installed: 19.2.3
wanted: 19.2.3
react-native:
installed: 0.84.1
wanted: 0.84.1
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: true
newArchEnabled: true
iOS:
hermesEnabled: true
newArchEnabled: true
Stacktrace or Logs
No logs needed.
MANDATORY Reproducer
https://github.com/gmanole01/react-native-animated-issue
Screenshots and Videos
https://github.com/user-attachments/assets/e7ce45e9-1455-4f1f-853f-6c7c18a49245
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
使用 yarn 和 Xcode 运行必需的复现程序,然后通过在它的两个标签页之间缓慢和快速滑动来复现故障。检查 packages/bottom-tabs/src/views/BottomTabView.tsx 中相关动画代码以及涉及的 React Native Animated 插值处理附近的内容。完成标准是:在 iOS 上反复进行动画切换时,之前为空白的标签页不再出现。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- ios, react-native
- 领域
- mobile
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 冷清
- 描述清晰度
- 基本清楚
- 新手友好度
- 48/100