Skip to content

[iOS] onPageSelected is not fired after upgrading to Expo 55 #1066

Description

@valerykonst

Environment

  • Expo SDK: 55
  • react-native 0.83.4
  • Platform: iOS
  • Library: react-native-pager-view 8.0.0
  • Orientation: vertical

Description

After upgrading to Expo 55, PagerView with orientation="vertical" still scrolls on iOS, but onPageSelected is never fired.

On iOS:

  • onPageScroll fires
  • onPageScrollStateChanged fires
  • the swipe visually completes
  • but onPageSelected does not fire

On Android Emulator, the same code works correctly.

Reproducible Demo

import React, { useRef, useState } from 'react';
import { Text, View, StyleSheet } from 'react-native';
import PagerView from 'react-native-pager-view';

export default function PagerViewTest() {
    const pagerRef = useRef<PagerView>(null);
    const [selectedPage, setSelectedPage] = useState<number | null>(null);
    const [scrollPage, setScrollPage] = useState<number | null>(null);
    const [scrollOffset, setScrollOffset] = useState<number | null>(null);
    const [scrollState, setScrollState] = useState<string>('unknown');

    return (
        <View style={styles.container}>
            <View style={styles.topPanel}>
                <Text style={styles.title}>PagerView test</Text>
                <Text style={styles.text}>selectedPage: {String(selectedPage)}</Text>
                <Text style={styles.text}>scrollPage: {String(scrollPage)}</Text>
                <Text style={styles.text}>scrollOffset: {scrollOffset?.toFixed(6) ?? 'null'}</Text>
                <Text style={styles.text}>scrollState: {scrollState}</Text>
            </View>

            <PagerView
                ref={pagerRef}
                style={styles.pager}
                initialPage={0}
                orientation="vertical"
                offscreenPageLimit={2}
                onPageSelected={(e) => {
                    const page = e.nativeEvent.position;
                    console.log('TEST onPageSelected =>', page);
                    setSelectedPage(page);
                }}
                onPageScroll={(e) => {
                    const page = e.nativeEvent.position;
                    const offset = e.nativeEvent.offset;
                    console.log('TEST onPageScroll =>', page, offset);
                    setScrollPage(page);
                    setScrollOffset(offset);
                }}
                onPageScrollStateChanged={(e) => {
                    const state = e.nativeEvent.pageScrollState;
                    console.log('TEST onPageScrollStateChanged =>', state);
                    setScrollState(state);
                }}
            >
                <View key="0" style={[styles.page, styles.page1]}>
                    <Text style={styles.pageText}>Page 0</Text>
                </View>

                <View key="1" style={[styles.page, styles.page2]}>
                    <Text style={styles.pageText}>Page 1</Text>
                </View>

                <View key="2" style={[styles.page, styles.page3]}>
                    <Text style={styles.pageText}>Page 2</Text>
                </View>

                <View key="3" style={[styles.page, styles.page4]}>
                    <Text style={styles.pageText}>Page 3</Text>
                </View>
            </PagerView>
        </View>
    );
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: '#111',
    },
    topPanel: {
        paddingHorizontal: 16,
        paddingTop: 12,
        paddingBottom: 8,
        backgroundColor: '#1c1c1c',
    },
    title: {
        color: 'white',
        fontSize: 20,
        fontWeight: '700',
        marginBottom: 8,
    },
    text: {
        color: 'white',
        fontSize: 14,
        marginBottom: 4,
    },
    pager: {
        flex: 1,
    },
    page: {
        width: '100%',
        height: '100%',
        alignItems: 'center',
        justifyContent: 'center',
    },
    page1: {
        backgroundColor: '#7c3aed',
    },
    page2: {
        backgroundColor: '#2563eb',
    },
    page3: {
        backgroundColor: '#059669',
    },
    page4: {
        backgroundColor: '#dc2626',
    },
    pageText: {
        color: 'white',
        fontSize: 32,
        fontWeight: '700',
    },
});

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    wipWork In Progress

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions