From 42c8dead621c80f25ef0980466e0ff7902af2913 Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Fri, 3 Jul 2020 11:13:12 -0700 Subject: [PATCH] Restore contentOffset from state if necesarry Summary: Changelog: [Internal] When JS Inspector is activated, ScrollView is unmounted and then mounted again with same state. ScrollView's content offset was being set to 0 inside `[RCTScrollViewComponentView prepareForRecycle]` during unmount but when it is mounted again, we ignored value inside state. Reviewed By: shergin Differential Revision: D22333125 fbshipit-source-id: f232dc95b695605f4819f29d8e0bf14b2f3e9150 --- .../ScrollView/RCTScrollViewComponentView.mm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm b/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm index 8bbbb5118bc..3671801f14b 100644 --- a/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +++ b/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm @@ -201,8 +201,14 @@ void RCTSetEnableOnDemandViewMounting(BOOL value) { assert(std::dynamic_pointer_cast(state)); _state = std::static_pointer_cast(state); + auto &data = _state->getData(); - CGSize contentSize = RCTCGSizeFromSize(_state->getData().getContentSize()); + auto contentOffset = RCTCGPointFromPoint(data.contentOffset); + if (!oldState && !CGPointEqualToPoint(contentOffset, CGPointZero)) { + _scrollView.contentOffset = contentOffset; + } + + CGSize contentSize = RCTCGSizeFromSize(data.getContentSize()); if (CGSizeEqualToSize(_contentSize, contentSize)) { return;