Guideline 4.0

Guideline 4.0 - Design: Non-Standard Controls or Android-Style UI

Low RiskMedium DifficultyTypical Fix: 3-7 days0 Reports
Also known as:Hamburger menu / navigation drawer instead of tab bar for primary navigationMaterial Design floating action button (FAB) instead of toolbar or navigation bar buttonAndroid-style toggle switches or checkboxes instead of iOS UISwitchLeft-pointing arrow (←) for back navigation instead of the iOS chevron (<)Android-style bottom navigation bar with shifting labels and icons

Our Take

Apple rejected your app because it uses UI controls and navigation patterns from Android or other platforms rather than standard iOS conventions. This includes hamburger menus instead of tab bars, Material Design-style floating action buttons, Android-style toggle switches, bottom navigation with Android styling, or back arrows pointing to the left (←) instead of the iOS chevron (<). Apple expects apps to feel native to iOS and follow platform conventions.

Resolution Guide

01

**Replace hamburger menu with a tab bar** — iOS users expect primary navigation via a `UITabBarController` or SwiftUI `TabView` at the bottom of the screen. Move your top-level sections into tab bar items (limit to 5 or fewer).


02

**Remove floating action buttons** — FABs are an Android Material Design pattern. On iOS, place primary actions in the navigation bar (as a trailing bar button) or as a prominent button within the content area:

```swift

.toolbar {

ToolbarItem(placement: .primaryAction) {

Button(action: createNew) {

Image(systemName: "plus")

}

}

}

```

03

**Use native iOS toggles** — Replace any custom toggle that mimics Material Design with the standard `Toggle` (SwiftUI) or `UISwitch` (UIKit). These automatically match the iOS look and feel including the green/gray color scheme.


04

**Fix back button styling** — Use `NavigationStack` / `UINavigationController` which provides the correct iOS back chevron (`<`) automatically. Do not use custom left arrow (←) icons.


05

**Adopt iOS-standard list styling** — Use `List` with `.listStyle(.insetGrouped)` for settings screens instead of Material card views or flat Android-style lists.


06

**Review the iOS HIG control catalog** — Reference the Human Interface Guidelines > Components section to find the iOS-native equivalent for every Android pattern in your app.


07

**Test the "does it feel native?" bar** — Hand the app to an iOS user unfamiliar with your app. If they notice the UI feels "different" or "Android-like," keep refining.


Example Rejection Email

From:Apple App Review Team
Subject:Guideline 4.0 - Design: Non-Standard Controls or Android
Your app did not follow iOS design best practices, which is not consistent with the App Store Review Guidelines. Specifically, your app uses a navigation drawer (hamburger menu) as the primary navigation instead of a tab bar, includes a floating action button in the bottom-right corner, and uses toggle switches styled after Material Design rather than the standard iOS toggle. Your app should feel at home on iOS and use standard iOS controls and navigation patterns. Next Steps: Please revise your app to use standard iOS UI components and resubmit.

Consider Appealing

Appeals rarely succeed for this rejection. Apple feels strongly about platform consistency. If your app is cross-platform and you need to ship quickly, focus on the most visible issues first: replace the hamburger menu with a tab bar and remove the FAB. Those two changes often resolve the rejection.

Generate Appeal

Before & After

Before — Rejected

// Android-style: hamburger menu + floating action button

struct ContentView: View {

@State private var showDrawer = false

var body: some View {

ZStack {

NavigationDrawer(isOpen: $showDrawer) {

MenuItems()

}

VStack {

HStack {

Button(action: { showDrawer.toggle() }) {

Image(systemName: "line.3.horizontal") // hamburger

}

Spacer()

}

Spacer()

// Floating action button

HStack {

Spacer()

Button(action: addItem) {

Image(systemName: "plus")

.frame(width: 56, height: 56)

.background(Color.blue)

.clipShape(Circle())

}

.padding()

}

}

}

}

}

After — Approved

// iOS-native: tab bar + navigation bar action

struct ContentView: View {

var body: some View {

TabView {

NavigationStack {

ItemListView()

.navigationTitle("Items")

.toolbar {

ToolbarItem(placement: .primaryAction) {

Button(action: addItem) {

Image(systemName: "plus")

}

}

}

}

.tabItem { Label("Items", systemImage: "list.bullet") }


NavigationStack {

SettingsView()

.navigationTitle("Settings")

}

.tabItem { Label("Settings", systemImage: "gear") }

}

}

}

What changed: Replace the hamburger menu with a TabView for top-level navigation and move the floating action button into the navigation bar using .toolbar. This matches what iOS users expect.

Before — Rejected

// Material Design toggle

Toggle("Notifications", isOn: $enabled)

.toggleStyle(MaterialToggleStyle()) // custom Android-like style

After — Approved

// Standard iOS toggle

Toggle("Notifications", isOn: $enabled)

// Uses default iOS toggle style — no custom style needed

What changed: Remove any custom toggle styles that mimic Material Design. The default SwiftUI Toggle uses the standard iOS switch appearance with the green/gray color scheme users expect.

Community Solutions · 0

Sign in to share your solution.

More Guideline 4 (Design) rejections

View all Guideline 4 rejections