diff --git a/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.mm b/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.mm index 86f3f578a7aa7e..704b2e95ec4730 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.mm @@ -49,6 +49,11 @@ - (void)_initializeUIRefreshControl [_refreshControl addTarget:self action:@selector(handleUIControlEventValueChanged) forControlEvents:UIControlEventValueChanged]; + + const auto &concreteProps = static_cast(*_props); + + _refreshControl.tintColor = RCTUIColorFromSharedColor(concreteProps.tintColor); + [self _updateProgressViewOffset:concreteProps.progressViewOffset]; } #pragma mark - RCTComponentViewProtocol @@ -78,6 +83,14 @@ - (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared & } } + if (newConcreteProps.tintColor != oldConcreteProps.tintColor) { + _refreshControl.tintColor = RCTUIColorFromSharedColor(newConcreteProps.tintColor); + } + + if (newConcreteProps.progressViewOffset != oldConcreteProps.progressViewOffset) { + [self _updateProgressViewOffset:newConcreteProps.progressViewOffset]; + } + BOOL needsUpdateTitle = NO; if (newConcreteProps.title != oldConcreteProps.title) { @@ -102,6 +115,15 @@ - (void)handleUIControlEventValueChanged static_cast(*_eventEmitter).onRefresh({}); } +- (void)_updateProgressViewOffset:(Float)progressViewOffset +{ + _refreshControl.bounds = CGRectMake( + _refreshControl.bounds.origin.x, + -progressViewOffset, + _refreshControl.bounds.size.width, + _refreshControl.bounds.size.height); +} + - (void)_updateTitle { const auto &concreteProps = static_cast(*_props);