diff --git a/React/Views/RCTScrollView.m b/React/Views/RCTScrollView.m index 24d129ba835e0c..2653fc143c90e3 100644 --- a/React/Views/RCTScrollView.m +++ b/React/Views/RCTScrollView.m @@ -325,7 +325,10 @@ - (void)setFrame:(CGRect)frame return; } + // Preserving `contentOffset` between layout passes. + CGPoint originalOffset = self.contentOffset; [super setFrame:frame]; + self.contentOffset = originalOffset; } #if !TARGET_OS_TV @@ -362,6 +365,7 @@ - (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher if ((self = [super initWithFrame:CGRectZero])) { _eventDispatcher = eventDispatcher; _scrollView = [[RCTCustomScrollView alloc] initWithFrame:CGRectZero]; + _scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; _scrollView.delegate = self; _scrollView.delaysContentTouches = NO; _automaticallyAdjustContentInsets = YES; @@ -466,10 +470,6 @@ - (void)layoutSubviews RCTAssert(self.subviews.count == 1, @"we should only have exactly one subview"); RCTAssert([self.subviews lastObject] == _scrollView, @"our only subview should be a scrollview"); - CGPoint originalOffset = _scrollView.contentOffset; - _scrollView.frame = self.bounds; - _scrollView.contentOffset = originalOffset; - #if !TARGET_OS_TV // Adjust the refresh control frame if the scrollview layout changes. RCTRefreshControl *refreshControl = _scrollView.rctRefreshControl;