Skip to content

Tabs switch animation delay in iOS 26 #383

Description

@stovv

Before submitting a new issue

  • I tested using the latest version of the library, as the bug might be already fixed.
  • I tested using a supported version of react native.
  • I checked for possible duplicate issues, with possible answers.

Bug summary

Hi! I tested repo on the latest iOS 26 beta and found a bug.
When using Tabs inside a Stack navigator, I get this small lag when switching between tabs. It disappears if I place the Tabs navigator in the root layout.

Image

Library version

0.9.2

Environment info

System:
  OS: macOS 26.0
  CPU: (12) arm64 Apple M3 Pro
  Memory: 148.28 MB / 18.00 GB
  Shell:
    version: "5.9"
    path: /bin/zsh
Binaries:
  Node:
    version: 22.13.1
    path: ~/.nvm/versions/node/v22.13.1/bin/node
  Yarn:
    version: 4.9.1
    path: /opt/homebrew/bin/yarn
  npm:
    version: 10.9.2
    path: ~/.nvm/versions/node/v22.13.1/bin/npm
  Watchman: Not Found
Managers:
  CocoaPods:
    version: 1.16.2
    path: /Users/dstavrov/.rbenv/shims/pod
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 25.0
      - iOS 26.0
      - macOS 26.0
      - tvOS 26.0
      - visionOS 26.0
      - watchOS 26.0
  Android SDK:
    API Levels:
      - "29"
      - "31"
      - "33"
      - "35"
      - "36"
    Build Tools:
      - 33.0.0
      - 35.0.0
    System Images:
      - android-29 | Google APIs ARM 64 v8a
      - android-36 | Google APIs ARM 64 v8a
    Android NDK: Not Found
IDEs:
  Android Studio: Not Found
  Xcode:
    version: 26.0/17A5241e
    path: /usr/bin/xcodebuild
Languages:
  Java:
    version: 21.0.7
    path: /usr/bin/javac
  Ruby:
    version: 2.7.4
    path: /Users/dstavrov/.rbenv/shims/ruby
npmPackages:
  "@react-native-community/cli":
    installed: 18.0.0
    wanted: 18.0.0
  react:
    installed: 19.0.0
    wanted: 19.0.0
  react-native:
    installed: 0.79.5
    wanted: 0.79.5
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: true
iOS:
  hermesEnabled: true
  newArchEnabled: true

info React Native v0.80.1 is now available (your project is running on v0.79.5).
info Changelog: https://github.com/facebook/react-native/releases/tag/v0.80.1
info Diff: https://react-native-community.github.io/upgrade-helper/?from=0.79.5&to=0.80.1
info For more info, check out "https://reactnative.dev/docs/upgrading?os=macos".

Steps to reproduce

  1. Put Tabs Router into Stack router in _layout's hierarchy
  2. Build with Xcode-beta 26
  3. Run on iOS beta 26

Reproducible sample code

Example with expo-router

File structure

  app/
    (tabs)/
      _layout.tsx
      index.tsx
      settings.tsx
      profile.tsx
    _layout.tsx
    +not-found.tsx

Root _layout.tsx

import { Stack } from 'expo-router';
  
  export default function RootLayout() {
    return (
      <Stack>
        <Stack.Screen 
          name="(tabs)" 
          options={{ headerShown: false }} 
        />
      </Stack>
    );
  }

Tabs _layout.tsx

  import { withLayoutContext } from 'expo-router';
  import React from 'react';
  
  import {
    type NativeBottomTabNavigationEventMap,
    type NativeBottomTabNavigationOptions,
    createNativeBottomTabNavigator,
  } from '@bottom-tabs/react-navigation';
  import type { ParamListBase, TabNavigationState } from '@react-navigation/native';
  
  const BottomTabNavigator = createNativeBottomTabNavigator().Navigator;
  
  const Tabs = withLayoutContext<
    NativeBottomTabNavigationOptions,
    typeof BottomTabNavigator,
    TabNavigationState<ParamListBase>,
    NativeBottomTabNavigationEventMap
  >(BottomTabNavigator);
  
  export default function TabLayout() {
    return (
      <Tabs screenOptions={{ lazy: false }}>
        <Tabs.Screen
          name="index"
          options={{
            title: 'Home',
            tabBarIcon: () => ({ sfSymbol: 'house' }),
          }}
        />
        <Tabs.Screen
          name="profile"
          options={{
            title: 'Profile',
            tabBarIcon: () => ({ sfSymbol: 'person.2' }),
          }}
        />
        <Tabs.Screen
          name="settings"
          options={{
            title: 'Settings',
            tabBarIcon: () => ({ sfSymbol: 'paperplane' }),
          }}
        />
      </Tabs>
    );
  }

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

    ApplebugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions