Mobile App Wiki

Mobile App Wiki

mobileapp.wiki

Home

Categories

mobileapp.wiki

Mobile App Wiki

Mobile app development knowledge base

PrivacyHomeSitemapRSS
© 2026 mobileapp.wiki
Home/UI/UX/Bottom Sheets and Modals: Patterns and Implementation Guide
UI/UX4 min read

Bottom Sheets and Modals: Patterns and Implementation Guide

Master bottom sheet and modal patterns for mobile apps. Covers detents, dismissal, accessibility, and choosing the right overlay for iOS and Android.

bottom-sheetmodalsheetdialogpopupiosandroiduxoverlaydetentpresentation

Table of Contents

The Rise of Bottom SheetsBottom Sheet vs Modal vs DialogBottom Sheet DetentsDismissal BehaviorScroll Behavior Inside SheetsAccessibilityCommon MistakesRelated Topics

The Rise of Bottom Sheets

Bottom sheets have become the dominant overlay pattern in mobile apps, largely replacing traditional centered modals and full-screen overlays. The reason is ergonomics: on large phones, bottom sheets place content and controls within thumb reach, while centered modals force users to stretch to the middle or top of the screen.

Both iOS and Android now provide native bottom sheet components with standardized behavior, making them a first-class citizen in mobile UI design.

Bottom Sheet vs Modal vs Dialog

Understanding when to use each pattern is critical for good UX:

Bottom Sheet: A panel sliding up from the bottom, draggable to different heights. Background content is partially visible. Use for actions, options, secondary content, filters, sharing menus, comments, and media controls.

Modal (Full Screen): A view that covers the current screen with its own navigation bar and close/done button. Use for multi-step tasks (composing, editing, creating), immersive content (video, image editor), or flows that feel separate from the parent.

Dialog (Alert): A small centered overlay with title, message, and 1-3 buttons. Background is dimmed and the dialog demands a response. Use for confirmations, important notifications, and binary decisions.

PatternCoverageDismissalComplexityThumb Reach
Bottom SheetPartialDrag down, tap outsideSimple to mediumExcellent
ModalFullClose button, swipe downMedium to complexStandard
DialogMinimalButton tapVery simpleStandard

Bottom Sheet Detents

Detents define the heights where a bottom sheet can rest. Modern implementations support multiple positions:

Peek (small): Shows just a header or summary, usually 15-25% of screen height. Users pull up to see more.

Half (medium): Shows main content at roughly 50% of screen height. This is the default starting position for most sheets.

Expanded (large): Nearly full screen at 90-95% height, showing all content with full scrollability while leaving a small gap to see the parent screen.

iOS: UISheetPresentationController and SwiftUI .presentationDetents support .medium(), .large(), .height(), .fraction(), and custom values. Use .presentationDragIndicator(.visible) to show the grab handle.

Android: BottomSheetBehavior supports STATE_COLLAPSED, STATE_HALF_EXPANDED, STATE_EXPANDED, and STATE_HIDDEN. Compose provides ModalBottomSheet and BottomSheetScaffold with SheetState management.

Dismissal Behavior

Swipe down: The primary dismissal gesture. The sheet follows the finger during drag, accelerates when released past a threshold (typically 30-50% of current height), and snaps back if released before it.

Tap outside: Tapping the dimmed background dismisses the sheet. For sheets with unsaved changes, consider a confirmation dialog first.

Close button: Always include a visible close mechanism in addition to gestures. Some users, especially those using assistive technology, cannot swipe.

Scroll Behavior Inside Sheets

When a bottom sheet contains scrollable content, the interaction must be carefully managed. When content is scrolled to the top and the user swipes down, the sheet should drag. When content is scrolled below the top, downward swipes should scroll content instead. Native implementations handle this automatically, but custom ones frequently get it wrong.

Accessibility

VoiceOver and TalkBack must announce sheets as overlays. Focus moves to the sheet on appear and returns to the trigger on dismiss. Content must accommodate Dynamic Type. When "Reduce Motion" is enabled, use fade instead of slide. All elements must be reachable by Voice Control and Switch Control.

Common Mistakes

  • Nesting sheets: A sheet opening another sheet creates confusing navigation. Push content within the same sheet or use a modal instead.
  • Too many detents: More than 3 makes behavior unpredictable. Stick to 2 for most cases.
  • No dimmed background: Users cannot tell the sheet is an overlay without a scrim.
  • Ignoring keyboard: Sheets must adjust when text fields receive focus to stay visible.
  • Fixed height: Short content should not create a half-empty oversized sheet.

Related Topics

  • Navigation Patterns Guide
  • Gesture Navigation Guide
  • Empty and Loading States Guide

How did you find this article?

Share

← Previous

Apple Human Interface Guidelines: The Complete Guide for App Developers

Next →

Material Design 3: The Complete Guide for Android App Developers

Related Articles

Apple Human Interface Guidelines: The Complete Guide for App Developers

Master Apple Human Interface Guidelines (HIG) to build iOS apps that feel native, pass App Store review, and deliver great user experiences.

Material Design 3: The Complete Guide for Android App Developers

Learn Material Design 3 (Material You) for building modern Android apps with dynamic color, updated components, and adaptive layouts.

Mobile App Onboarding: Patterns, Best Practices, and Conversion Tips

Explore proven onboarding patterns for mobile apps including walkthroughs, progressive disclosure, and personalization to boost user activation.

Mobile Accessibility: A Complete Guide to Building Inclusive Apps

Build accessible mobile apps that work for everyone. Covers VoiceOver, TalkBack, Dynamic Type, color contrast, and WCAG compliance for iOS and Android.

Dark Mode Implementation: A Practical Guide for iOS and Android

Implement dark mode correctly on iOS and Android. Covers semantic colors, image adaptation, testing strategies, and common pitfalls to avoid.