Skip to content

Commit

Permalink
Fix RefreshControl layout when removed from window (#31024)
Browse files Browse the repository at this point in the history
Summary:
Since iOS 14 refresh control is sometimes visible when it shouldn't. It seems to happen when it is removed and added back to the window. This repros easily when using react-native-screens with react-navigation tabs. Inactive tabs are detached from the window to save resources.

Calling endRefreshing when refresh control is added to the window fixes the layout. It will also be called on first mount where it is not necessary, but should be a no-op and didn't cause any issues. I also decided to call it for all ios versions, although it is only needed on iOS 14+ to avoid forking behavior more.

## Changelog

[iOS] [Fixed] - Fix RefreshControl layout when removed from window

Pull Request resolved: #31024

Test Plan:
Before:

https://user-images.githubusercontent.com/2677334/108666197-93ea5a80-74a4-11eb-839b-8a4916967bf8.mov

After:

https://user-images.githubusercontent.com/2677334/108666223-9ea4ef80-74a4-11eb-8489-4e5d257299c8.mov

Reviewed By: shergin

Differential Revision: D26590759

Pulled By: PeteTheHeat

fbshipit-source-id: b8c06068a24446b261cbeb88ff166289724031f1
  • Loading branch information
janicduplessis authored and facebook-github-bot committed Feb 23, 2021
1 parent 36ca57e commit e67811e
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions React/Views/RefreshControl/RCTRefreshControl.m
Expand Up @@ -49,6 +49,18 @@ - (void)layoutSubviews
_isInitialRender = false;
}

- (void)didMoveToWindow
{
[super didMoveToWindow];

// Since iOS 14 there seems to be a bug where refresh control becomes
// visible if the view gets removed from window then added back again.
// Calling endRefreshing fixes the layout.
if (!_currentRefreshingState) {
[super endRefreshing];
}
}

- (void)beginRefreshingProgrammatically
{
UInt64 beginRefreshingTimestamp = _currentRefreshingStateTimestamp;
Expand Down

0 comments on commit e67811e

Please sign in to comment.