Skip to content

[Native] Add delaysChildPressedState to native gesture#4308

Open
j-piasecki wants to merge 6 commits into
mainfrom
@jpiasecki/delaysChildPressedState
Open

[Native] Add delaysChildPressedState to native gesture#4308
j-piasecki wants to merge 6 commits into
mainfrom
@jpiasecki/delaysChildPressedState

Conversation

@j-piasecki

@j-piasecki j-piasecki commented Jul 9, 2026

Copy link
Copy Markdown
Member

Description

Based on react/react-native#57259, adds a new delaysChildPressedState config entry to the native gesture handler and exposes it on the ScrollView.

The default behavior remains unchanged (visual feedback is delayed in scrollable containers), but can be disabled using the new config entry.

Since HasChildPressedStateDelay interface is available starting with React Native 0.87, it's currently accessed using reflection to keep backwards compatibility. On older versions, delaysChildPressedState is a no-op. Once 0.87 is the lowest compatible version with RNGH, we can drop the reflection and use it directly.

Test plan

import * as React from 'react';
import { Platform, SafeAreaView } from 'react-native';
import {
  GestureHandlerRootView,
  ScrollView,
  Touchable,
} from 'react-native-gesture-handler';

export default function App() {
  return (
    <GestureHandlerRootView style={{ flex: 1 }}>
      <SafeAreaView
        style={[
          { flex: 1, flexDirection: 'row' },
          Platform.OS === 'android' && { paddingTop: 50 },
        ]}>
        <ScrollView
          delaysChildPressedState={false}
          style={{ width: '50%', height: 200, backgroundColor: 'lightgray' }}>
          <Touchable
            style={{ width: 100, height: 100, backgroundColor: 'red' }}
            activeScale={0.9}
            onPress={() => console.log('Pressed!')}
          />
        </ScrollView>

        <ScrollView
          delaysChildPressedState={true}
          style={{ width: '50%', height: 200, backgroundColor: 'lightgray' }}>
          <Touchable
            style={{ width: 100, height: 100, backgroundColor: 'red' }}
            activeScale={0.9}
            onPress={() => console.log('Pressed!')}
          />
        </ScrollView>
      </SafeAreaView>
    </GestureHandlerRootView>
  );
}

Copilot AI review requested due to automatic review settings July 9, 2026 13:05

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new delaysChildPressedState configuration option to the v3 Native gesture, allowing apps to control whether scrollable containers delay children’s pressed-state feedback (iOS: UIScrollView.delaysContentTouches, Android: ViewGroup.shouldDelayChildPressedState behavior via RN 0.87+ hook).

Changes:

  • Added delaysChildPressedState to the v3 Native gesture TypeScript config and native-props whitelist.
  • Implemented iOS support by wiring the option to UIScrollView.delaysContentTouches, including re-applying updates after binding.
  • Implemented Android support via reflective access to RN 0.87+ HasChildPressedStateDelay, applying the override per-gesture and restoring on reset.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
packages/react-native-gesture-handler/src/v3/hooks/gestures/native/NativeTypes.ts Adds the new TS config property and whitelists it for native propagation.
packages/react-native-gesture-handler/apple/Handlers/RNNativeViewHandler.mm Applies the new config to UIScrollView.delaysContentTouches and keeps it in sync on config updates.
packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/core/NativeViewGestureHandler.kt Adds Android handling via reflection and per-gesture apply/restore logic.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@m-bert m-bert left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀

Comment thread packages/docs-gesture-handler/docs/gestures/use-native-gesture.mdx Outdated
@j-piasecki j-piasecki requested a review from m-bert July 10, 2026 07:35
Comment thread packages/react-native-gesture-handler/src/v3/hooks/gestures/native/NativeTypes.ts Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants