This repository contains minimal reproductions for two React Native RefreshControl bugs on iOS.
File: RefreshControlStuckScreen.tsx
When a RefreshControl is actively refreshing and the user navigates away from the screen (e.g., switching tabs), the refresh indicator becomes stuck upon returning to the screen.
- Pull down on the ScrollView to trigger refresh
- While the spinner is animating, switch to another tab
- Return to the original tab
- Result: RefreshControl remains stuck in refreshing state
The RefreshControl should properly cancel or complete when the screen unmounts/remounts.
File: RefreshControlTintColorScreen.tsx
The tintColor prop on RefreshControl is not applied on initial render on iOS. The spinner appears in the default gray color instead of the specified color.
- Pull down on the ScrollView to trigger refresh
- Result: Spinner appears gray instead of orange
The RefreshControl spinner should be orange as specified by tintColor="orange".
Setting the tintColor after a short delay (~500ms) works, but this shouldn't be necessary:
const [tintColor, setTintColor] = useState("white")
useEffect(() => {
setTimeout(() => setTintColor("orange"), 500)
}, [])# Install dependencies
yarn install
# Run on iOS
yarn ios- Platform: iOS (bugs not present on Android)
- React Native: [Your version]
- React Native Navigation: [Your version if applicable]
Both screens contain detailed inline comments and clear visual indicators to make the bugs immediately apparent during testing.