StackNavigator is usually a StackScreen: a navigation bar on top and its own scroll area below. Each screen keeps its scroll position, so a list is where you left it when you come back.
StackScreen
string
required
The bar title.
boolean | ReactNode
A large title that folds into the bar as content scrolls under it. Pass a node, such as a logo, to show that large while the bar still folds to
title.ReactNode
A quieter second line under the title: a count, a status.
ReactNode
The bar’s leading slot, usually a back or close button.
ReactNode
The bar’s trailing slot, usually
StackBarButtons.boolean
Leave room under the content for a
StackTabBar.ReactNode
A row of actions along the bottom, for a screen without a tab bar. An iOS toolbar (floating glass in the modern look) or Material’s bottom app bar, with the screen’s
fab in it. Usually StackBarButtons.ReactNode
A picture across the top that runs under the bar and status bar, like an album cover. Over it the bar is see-through with white buttons; once it scrolls away the normal bar returns. On iOS it stretches when pulled down.
number
default:"300"
The hero’s height in px.
() => Promise<unknown>
Pull down to refresh; the spinner holds until the promise settles.
{ label, onPress, icon? }
A Material extended floating action button, on Android only; it folds to an icon on scroll. On iOS put the same action in the bar.
'none' | 'onDrag'
default:"'none'"
onDrag puts the keyboard away when the content is dragged.string
The screen’s background. Grouped lists look best on one that differs from
surface.RefObject<HTMLDivElement>
The screen’s scroller.
Bar buttons
() => void
Tap handler. Optional with
menu.boolean
The confirming action, such as Save or Done: bold on iOS, accent on Android. Keep its label short.
A tap opens a menu instead: a pull-down under the button on iOS, Material’s overflow menu on Android, a menu on desktop. Same items as
ContextMenu.string
Accessible name. Required when the button shows only an icon.
boolean
Greyed out.
strong Save on the right.
Search
string / (value) => void
required
The query.
string
required
Field placeholder.
string
required
iOS’s Cancel button, and the accessible name of Android’s back arrow.
string
default:"'Clear'"
Accessible name of the clear button.
() => void
The keyboard’s Search key.
{ value, label }[] / string / (value) => void
A scope bar under the field while searching: a segmented control on iOS, filter chips on Android.
{ label, icon? }[] / string / (label) => void
Recent searches or suggestions shown while the query is empty. A tap makes one the query, or calls
onSuggestion.StackTabBar
Tab / (key) => void
Only needed outside a navigator with
tabs; inside one the bar binds itself. onChange fires for every tap, including on the current tab.boolean
iOS 26 look: scrolling down shrinks the bar to a capsule with the current tab’s icon. Other looks ignore it.
{ label, onPress, active? }
A search tab: its own glass circle beside the bar in the iOS 26 look, the last tab elsewhere.
ReactNode | (placement) => ReactNode
Something that stays above every tab, such as a mini player or an upload in progress. A glass capsule above the bar in the iOS 26 look, moving beside it when the bar shrinks (
placement is then 'inline'); a strip above the bar in other looks.