Skip to content

Instantly share code, notes, and snippets.

@kadikraman
Created June 7, 2025 14:10
Show Gist options
  • Save kadikraman/b5dd0f28c3a613ab61af91724a5c6c50 to your computer and use it in GitHub Desktop.
Save kadikraman/b5dd0f28c3a613ab61af91724a5c6c50 to your computer and use it in GitHub Desktop.
Native Animated Bottom Tab Icons on iOS

How to add Animated Bottom Tab Icons for iOS

Install expo-symbols.

Choose which symbols you want to use from SF Symbols.

Create a TabBarIcon.tsx:

import { SymbolView } from "expo-symbols";
import type { SymbolViewProps } from "expo-symbols";

type Props = {
  name: SymbolViewProps["name"];
  size: number;
  color: string;
  focused: boolean;
};

export function TabBarIcon({ name, size, color, focused }: Props) {
  return (
    <SymbolView
      name={name}
      type="hierarchical"
      size={size}
      tintColor={color}
      animationSpec={
        focused
          ? {
              effect: {
                type: "bounce",
              },
            }
          : {}
      }
    />
  );
}

Use it in your Tabs layout:

<Tabs.Screen
  // other props
  options={{
    // other options
    tabBarIcon: (props) => (
      <TabBarIcon
        {...props}
        name={
          props.focused
            ? "sparkles.rectangle.stack.fill"
            : "sparkles.rectangle.stack"
        }
      />
    ),
  }}
/>

What about Android?

SF symbols are native to iOS and aren't available on Android. But you can achieve a similar bounce effect using @expo/vector-icons and Reanimated.

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