Repository navigation
Conversation
|
Hi @aljadan! Thank you for your pull request and welcome to our community. Action RequiredIn order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you. ProcessIn order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA. Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with If you have received this in error or have any questions, please contact us at cla@meta.com. Thanks! |
|
Thank you for signing our Contributor License Agreement. We can now accept your code for this (and any) Meta Open Source project. Thanks! |

In RTL, a recycled horizontal
ScrollViewstarts scrolled to the end instead of the start. The first mount is fine, but every remount (unmount/mount, navigating back and forth) opens at the end.The cause is the reset order in
prepareForRecycle. In RTL the scroll view is mirrored withscaleX(-1), so UIKit reportszoomScale == -1. We resetcontentOffsetto 0 first, then setzoomScale = 1.0. UIKit treats that as a real zoom change and movescontentOffsetto the max offset. The view is mirrored again on reuse, so it opens at the logical end. JS doesn't get anonScroll, so it still thinks the offset is 0.This regressed in 0.84 with the zoom reset (#54668). #55804 fixed the container frame but not the offset. It only shows when the content is wider than the scroll view.
The fix is to reset
zoomScalebeforecontentOffset, so the offset reset runs last.Changelog:
[IOS] [FIXED] - Fix recycled RTL horizontal ScrollView starting at the end instead of the start
Test Plan:
Repro: https://github.com/aljadan/scrollView-remount-repro
before-fix.mp4
after-fix.mp4