diff --git a/apps/mobile/src/features/threads/PendingApprovalCard.tsx b/apps/mobile/src/features/threads/PendingApprovalCard.tsx
index b5a9d4ed27eb2..f9ec44d5d4ee5 100644
--- a/apps/mobile/src/features/threads/PendingApprovalCard.tsx
+++ b/apps/mobile/src/features/threads/PendingApprovalCard.tsx
@@ -80,7 +80,7 @@ export function PendingApprovalCard(props: PendingApprovalCardProps) {
{warning ? (
{warning}
) : null}
-
+
{options.map((option) => (
diff --git a/apps/mobile/src/features/threads/ThreadDetailScreen.tsx b/apps/mobile/src/features/threads/ThreadDetailScreen.tsx
index 0d3258dd3bee7..9a470e7c4bf26 100644
--- a/apps/mobile/src/features/threads/ThreadDetailScreen.tsx
+++ b/apps/mobile/src/features/threads/ThreadDetailScreen.tsx
@@ -1019,6 +1019,16 @@ function ThreadDetailBody(
maxHeight: pendingUserInputMaxHeight.value,
flexGrow: 0,
}));
+ // Questions overlay the composer on iOS; an approval sits above it, so it gives up its height.
+ const approvalHeightStyle = useAnimatedStyle(() => ({
+ maxHeight: derivePendingUserInputMaxHeight({
+ windowHeight: screenAreaHeight,
+ keyboardHeight: keyboardStickyEnabled ? -keyboardTranslation.value : 0,
+ navigationHeaderHeight,
+ composerOverlapHeight,
+ }),
+ flexGrow: 0,
+ }));
// The usage panel stacks with the composer and any approval card, so it gets
// whatever room they leave below the header. Measured only while it is open
// so typing in the composer does not re-render the screen.
@@ -1718,12 +1728,19 @@ function ThreadDetailBody(
exiting={FadeOut.duration(140)}
>
{props.activePendingApproval ? (
-
+
+
+
) : null}
{props.activePendingUserInput ? (