Apple reviewers test IAP apps on physical devices, including small-screen models like the iPhone SE (667 logical points of usable height). A paywall that requires scrolling to see the price, auto-renewal terms, or the subscribe button fails Apple guideline 3.1.2's requirement that subscription terms are clearly displayed before purchase. Beyond review, a paywall where the subscribe button is below the fold on smaller devices creates a real conversion drop for users who never see it — large hero images or feature lists that push the CTA off-screen reduce paid conversions from the segment most likely to be budget-conscious.
High because a paywall requiring scroll to reveal the price or CTA fails Apple guideline 3.1.2 on physical device review and reduces conversion on smaller screens.
Pin the pricing section and CTA to the bottom of the paywall using a flex layout that prevents the content above from pushing it off-screen. Keep hero images under 160 logical points on paywalls and limit feature lists to 3–4 items maximum.
// PaywallScreen.tsx — pinned pricing section
<View style={{ flex: 1 }}>
<View style={{ flex: 1 }}>
{/* Hero image: maxHeight 140, feature list: 3-4 items */}
</View>
<View style={styles.pricingSection}>
<Text>{price}/month — auto-renews. Cancel anytime in Settings.</Text>
<SubscribeButton />
</View>
</View>
Test on iPhone SE (667pt height) in the iOS Simulator before every submission. On Android, test on a 360dp-wide device. The pricing section should be fully visible on first render with no scroll gesture.
app-store-iap-subscriptions.subscription-lifecycle.paywall-elementshighScrollView wrapping the paywall where the subscribe button and key terms fall below the fold on a standard iPhone screen (~844 logical points height, accounting for safe area insets of ~50pt top and ~34pt bottom = ~760pt usable). (2) Paywall designs that use a large header image or hero section that pushes price and terms below the visible area. (3) Feature lists (FlatList, map() over feature items) before the pricing section that cause scrolling to be required. (4) In Flutter, SingleChildScrollView wrapping a paywall with a tall header. Check the paywall's JSX structure: the price, billing period, auto-renewal text, and subscribe button should all be visible without scrolling. If the layout uses flex: 1 and justifyContent: 'flex-end' to pin the CTA section, verify the content above it doesn't overflow. Also check for keyboardAvoidingView or safe-area handling that could compress the paywall on smaller devices (iPhone SE: 667pt)."PaywallScreen.tsx renders a full-height hero image (300pt) and a 6-item feature list before the pricing section — on iPhone SE the subscribe button is not visible without scrolling" or "PaywallScreen wraps all content in ScrollView with no pinned CTA — pricing terms not guaranteed visible on first view"<View style={{ flex: 1 }}>
<View style={{ flex: 1 }}>
{/* Feature highlights — keep to 3-4 items max */}
</View>
<View style={styles.pricingSection}>
{/* Price, terms, subscribe button — always visible */}
<Text>{price}/month — auto-renews. Cancel anytime.</Text>
<SubscribeButton />
</View>
</View>