fix: Invalid ScrollView position on input focus#431
Conversation
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎ 1 Skipped Deployment
|
PerformanceInterestingly, the performance got even better on android. It seems that the application of transforms on android is slow and it is better to use theoretically slower layout props to position items, so this PR will also introduce better performance of items reordering. Test exampleThe test example consists of 300 animated views which position is changed either via x and y translation or via the top/left layout position. Fabric (New Arch)Slightly faster with layout props
Paper (Old Arch)Almost 2 times faster with layout props
|
There was a problem hiding this comment.
Pull Request Overview
This PR fixes an issue where ScrollView positioning was incorrect when TextInput components inside sortable items received focus. The problem occurred because sortable items used CSS transforms for positioning, which caused the ScrollView to calculate incorrect positions based on the original render location rather than the transformed position.
- Replaced transform-based positioning with layout properties (
top/left) - Removed architecture-specific positioning logic and the
isPaper()utility function - Simplified the positioning system by using a single position reference instead of separate initial and current positions
Reviewed Changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| useItemStyles.ts | Core fix replacing transform positioning with layout props and simplifying position management |
| platform.ts | Removed unused isPaper() function that was checking for Paper architecture |
| SortableGrid.tsx | Changed flexBasis from undefined to 'auto' for better layout behavior |
|
Well, performance is not improved then the |
## Description Small improvement for perf issues after #431
# [1.8.0](v1.7.1...v1.8.0) (2025-07-29) ### Bug Fixes * Allow disabling default layer provider ([#424](#424)) ([ded5c92](ded5c92)), closes [#417](#417) [#36877](https://github.com/MatiPl01/react-native-sortables/issues/36877) * Buggy grid swapping in some edge cases ([#414](#414)) ([3617f86](3617f86)) * DragProvider drag end index assignment ([#411](#411)) ([69ad8a6](69ad8a6)) * Hiding of the sortable item when teleported ([#436](#436)) ([4c3796f](4c3796f)) * Invalid flex container height on initial render and other small issues ([#437](#437)) ([48e905b](48e905b)) * Invalid ScrollView position on input focus ([#431](#431)) ([2693234](2693234)), closes [#ef4444](https://github.com/MatiPl01/react-native-sortables/issues/ef4444) * Long drop duration reordering issues ([#406](#406)) ([ace7037](ace7037)) * Multiple minor improvements ([#439](#439)) ([f9d83e3](f9d83e3)) * Paper flickering and positioning issues ([#426](#426)) ([744e291](744e291)) * Teleported active item flickering ([#405](#405)) ([1413af2](1413af2)) ### Features * Base multi zone provider ([#409](#409)) ([56f0ef3](56f0ef3)) * Base zone with event callbacks ([#413](#413)) ([e51ca61](e51ca61)) * Fixed items support in sortable flex ([#416](#416)) ([1d23fcc](1d23fcc)), closes [#374](#374) * Max overscroll settings ([#423](#423)) ([167dc4e](167dc4e)), closes [#419](#419) * Separate controlled item dimensions from measured dimensions ([#433](#433)) ([cad95e5](cad95e5)) ### Performance Improvements * Merge item decoration styles with position styles ([#407](#407)) ([5066edd](5066edd)) * More performant items reordering ([#435](#435)) ([be78141](be78141)) * Reduce the number of unnecessary onLayout calls ([#434](#434)) ([ce56159](ce56159)), closes [#431](#431) * Replace useSharedValue with useMutableValue ([#408](#408)) ([6994c7a](6994c7a))
|
🎉 This issue has been resolved in version 1.8.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
Description
Issue description
This PR fixes invalid
ScrollViewbehavior when theTextInputcomponent was focused. I noticed that this is caused by the fact that all items rendered within the sortable component use transforms for positioning (as transforms are said to be faster thantop/leftprops).Unfortunately, the position of the
ScrollViewis adjusted based on the render position of theTextInputcomponent but in our case all items are rendered in the top left corner of the sortable component container and then transformed to their proper positions on the screen.Solution
I decided to replace transforms with
topandleftlayout props which seem to work fine.Test example
Screen_recording_20250726_010612.mp4
Screen_recording_20250726_010142.mp4
Source code