From a9b28484a51cfcf3353a6ed126f203a0e0facd5a Mon Sep 17 00:00:00 2001 From: Fredrik Burmester Date: Mon, 1 Jun 2026 12:40:26 +0200 Subject: [PATCH] fix(tv): keep search grid padding on re-search and stop dictation hint clip - TVSearchSection: replace contentInset+contentOffset (offset only applies on initial mount, so the reused FlatList lost its left padding on a second search and snapped to the edge) with stable contentContainerStyle padding. - TVSearchPage: drop the horizontal margin around the native tvOS search bar so it spans full width; the extra margin squeezed the bar and clipped its trailing "Hold to Dictate in " hint. --- components/search/TVSearchPage.tsx | 5 ++++- components/search/TVSearchSection.tsx | 10 +++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/components/search/TVSearchPage.tsx b/components/search/TVSearchPage.tsx index 54ad07e1e..580e8a002 100644 --- a/components/search/TVSearchPage.tsx +++ b/components/search/TVSearchPage.tsx @@ -235,10 +235,13 @@ export const TVSearchPage: React.FC = ({ module). It renders the native search bar + grid keyboard and forwards typed text into the existing query pipeline via setSearch; our own results grid renders below. */} + {/* No horizontal margin here: the native tvOS search bar centers itself + and renders a trailing "Hold to Dictate in " hint. Extra + margins squeeze the bar's width and clip that trailing hint, so let + the native view span the full width and own its own insets. */} diff --git a/components/search/TVSearchSection.tsx b/components/search/TVSearchSection.tsx index 3d72de8df..ffaef2366 100644 --- a/components/search/TVSearchSection.tsx +++ b/components/search/TVSearchSection.tsx @@ -297,12 +297,12 @@ export const TVSearchSection: React.FC = ({ removeClippedSubviews={false} getItemLayout={getItemLayout} style={{ overflow: "visible" }} - contentInset={{ - left: edgePadding, - right: edgePadding, - }} - contentOffset={{ x: -edgePadding, y: 0 }} + // Edge padding via contentContainerStyle, NOT contentInset+contentOffset. + // contentOffset only applies on initial mount; since this FlatList is + // reused across searches (stable key), a second search left the inset + // without the offset and the grid snapped flush to the left edge. contentContainerStyle={{ + paddingHorizontal: edgePadding, paddingVertical: SCALE_PADDING, }} />