Skip to content

fix(mobile): pad ContestsScreen bottom so the last card clears the tab bar#14293

Closed
dylanjeffers wants to merge 2 commits into
mainfrom
claude/adoring-bassi-f3b08c
Closed

fix(mobile): pad ContestsScreen bottom so the last card clears the tab bar#14293
dylanjeffers wants to merge 2 commits into
mainfrom
claude/adoring-bassi-f3b08c

Conversation

@dylanjeffers
Copy link
Copy Markdown
Contributor

Summary

  • On mobile, the contests list on ContestsScreen got cut off at the bottom — users couldn't see/scroll to the last card because it sat behind the bottom tab bar and the iOS home-indicator safe area.
  • The shared <ScrollView> only auto-appends a <PlayBarChin />, which expands to PLAY_BAR_HEIGHT only when a track is playing (else 0). It does not account for BOTTOM_BAR_HEIGHT (41px) or insets.bottom (~34px on devices with a home indicator).
  • ContestsScreen is pushed onto a stack inside the bottom-tab navigator (AppTabScreen.tsx:272), so the tab bar stays mounted underneath. The screen relied on <Flex mv='l'> (~16px) for bottom spacing, which isn't enough.
  • Web (ContestsPage) isn't affected because desktop browsers have no system chrome at the bottom and the <Page> wrapper handles its own bottom clearance.

Fix

Add contentContainerStyle={{ paddingBottom: spacing(30) }} (~120px) to the ScrollView. This matches the convention already used in NotificationList.tsx:27-29, and stacks with PlayBarChin so the last card clears both the play bar (when playing) and the bottom tab bar + safe area.

Test plan

  • iOS: navigate to Contests, scroll to the last card — confirm fully visible above the tab bar (no audio playing)
  • iOS: start a track, navigate to Contests, scroll to the last card — confirm fully visible above the play bar + tab bar
  • Android: same two checks
  • Compare top spacing — mv='l' is unchanged so visual top alignment is identical

🤖 Generated with Claude Code

dylanjeffers and others added 2 commits May 8, 2026 14:42
Instruments three key contest interactions following the existing
'Remix Contest:' event prefix and {remixContestId, trackId} property
shape used by the host/pick-winners events:

  - REMIX_CONTEST_VIEW: contest page/screen first resolves trackId+eventId
  - REMIX_CONTEST_ENTER: user taps Enter Contest / Upload Remix
  - REMIX_CONTEST_VIEW_SUBMISSIONS: user opens the submissions tab

Mobile submissions-tab firing uses useFocusedTab from
react-native-collapsible-tab-view because the contest tabs mount
eagerly (lazy: false) — a plain mount effect would fire even for
users who only view the Details tab.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…b bar

The shared <ScrollView> only auto-appends a <PlayBarChin /> for the
now-playing bar; it leaves the screen's bottom flush with the bottom tab
bar and iOS home-indicator safe area. ContestsScreen relied on a 16px
mv='l' margin which isn't enough to clear ~75px of system chrome, so the
last contest card got hidden behind the tab bar.

Add `paddingBottom: spacing(30)` to the ScrollView's contentContainerStyle,
matching the convention used in NotificationList.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 12, 2026

⚠️ No Changeset found

Latest commit: 8d49d5f

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@dylanjeffers
Copy link
Copy Markdown
Contributor Author

Misdiagnosed — the issue is pagination, not bottom padding. Reopening as a separate PR with the correct fix (wire up fetchNextPage / onEndReached).

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant