When I see "iOS Navigation Patterns" I cringe. There are no patterns and it's one of the worst things (there are many) when comparing to Android. Going back on Android is easy, and back can mean multiple things. On iOS that I've been using over a year I just blindly try one of the two back "patterns", then look for buttons in an unreachable places. And even that sometimes doesn't work.
Don't let developers use patterns, fix it on OS level. Developers don't want you to leave parts of their app - try doing back action on Instagram reels for example.
Also, why is the back button on iOS all over the place?!
Sometimes it’s on the top left, sometime bottom left, sometimes bottom right, and im sure some apps even place it somewhere else.
On Android there is a dedicated OS back button that is always in reach, when using the phone with one hand.
This is the far superior way of doing this.
The convention is that it's in the top left and that the "swipe rightward from the left edge of the screen" gesture also goes back. Most apps work like this, and it's not actually a problem in my experience. I can't actually remember seeing an app which puts the back button in the bottom right...
With apps which follow the convention, I don't miss a hardware back button (or, as is more common in Android these days, a software back button in an OS-provided bar at the bottom of the screen). Swiping from the left edge of the screen feels pretty good. But Android's approach is probably better at providing a decent UX with terrible apps.
Gesture navigation is the standard in android these days. The OS-provided bar isn't even default on budget oppo or Xiaomi devices.
It's indeed very rare to have this large navigation bar on Android nowadays, I suspect the latest Android doesn't even support it.
Android (14) still supports it, it's in Settings > System > Navigation mode (on Pixel devices, different manufacturers might put it in other menus). I still use it and will keep using it.
Interesting, I had no idea they kept it! That's going to make my life much easier when testing if my apps work with it
Same here; I found the swiping very difficult. I have also had a small number of people ask me how to switch to buttons.
In which apps is this the default? I can't think of a single one where a swipe were used to navigate "back" and "forth". Gestures are everywhere, but never in the capacity of the back button.
What do you mean? Flagship Android phones haven't shipped with a physical back button in years. Gesture navigation has been the norm for quite a while. And it works when apps use that system for its navigation patterns, which in my experience is every app on Android, including 3rd party.
If you enable gesture navigation, swiping from the side of the screen emits a virtual back button press. It's an OS level gesture (that apps can attempt to disable, but that can be overridden by the user). This doesn't require apps to implement anything it they implement normal back button behaviour already.
Several brands have removed button navigation by default. I think you can still enable it in the settings, but the button bar at the bottom of the screen seems to be the exception these days.
Do you use Android with gesture based navigation or with the old style 3 buttons? With gesture based navigation, swiping back is the same as the old back button in any app.
Ah, I see. I haven't used Android in a while.
Then I don't really see what differentiates iOS and Android at all, other than that iOS still usually has the button in the top left.
Im trying the edge swipe thing now again on my iPhone and it’s pretty finicky and i sometimes need 2-3 times to get it right.
So, like in the past, I will dismiss these swipe gestures after a while and revert to hunting for the back button in the end.
Also, lots of apps have their “Done” or “Close” buttons on top, which are equivalent to “back”.
Apple should really enforce some consistency here.
Huh, I don't think I've had to retry the back gesture once, it's always just worked. Are you using a case which makes it hard to access the screen edge or something?
Safari is bottom left.
In the logic of Apple's design patterns, the button on the bottom left doesn't take you back a view. It manipulates the browser view and asks it to go one step back. I'm not saying that this is really the best way to reason about it, but at least it's internally consistent.
As sibling commentor pointed out, the default (and standard) way to go back is a back gesture, there is no button to press anymore. The OS teaches you how to do this with an overlay tutorial. My mom, who is 68, was able to figure this out without any help when she upgraded to a Pixel 4A several years ago.
What is surprising to me is that using a Back button that's at the top of the phone would be acceptable to you. That's definitely the hardest part of the UI to reach one handed, and yet going back in an app is definitely something you should be able to do quickly without having to stretch your fingers to reach it. Perhaps you prefer smaller phones, but those are becoming pretty rare these days.
So what's fun about that is from an iOS developer perspective, this is not always free, and the back gesture itself only works within your own app unless you do additional work. This is probably why you mention
As I could imagine the app's back navigation is a factor you must consider when the OS doesn't handle it. It's not a dimension that matters on Android- as all apps are going to play nice within the back gesture system automatically unless they block it intentionally, even if the app isn't particularly good. I cannot recall any app I've come across that actually blocks the back gesture (not even games, remote desktop, Steam Link).
A back button at the top of the screen isn't very usable. I think it kinda makes sense to have it there, but it's not something you should be using as the primary back input.
I don't know what you mean by "the back gesture itself only works within your app". I assume there are cases in Android where one app took you to another app and you can do the back gesture to go back to the app you came from? Anyway, the iOS model is that the back gesture just navigates within the app, and there are other features for navigating between apps. I won't make an argument about which is better, but I don't think iOS's model is obviously much worse.
I thought "swipe rightward from left edge" was usually "open the hidden menu" except in browsers.
No, swiping right from the left edge is pretty much universally "go back". Trying it now, it's true in pretty much every app with a navigation model where "back" makes sense; Mail, Settings, Notes, Bitwarden, Messages, Ivory, Nextcloud, a bunch of banking apps, Files, Signal, Slack, etc etc. If an app has a navigation model where "back" makes sense but swiping rightward from the left edge doesn't go back, I get very surprised; it pretty much never happens. I think Google Maps is the only example I can think of at the moment (and Google is generally impressively bad at following iOS platform conventions in my experience).
I guess Discord is an example of an app where swiping from the left opens a hidden menu, but that "opening the hidden menu" thing can be thought of navigating "back" from the channel view to the server/channel list view. In any case, it's not an example of a situation where there is a "navigate back" option on the screen but swiping from the left edge doesn't trigger it.
What’s worse is that the same apps have the same buttons in different places depending on if you’re on iPhone or iPad. While different form factors have different affordances, this is just bad for muscle memory.
The activity stack experience in Android is probably my favorite part of the system design. It produces a deep consistency that makes navigation effortless.
I really wish this had been built in to iOS in the same way.
The activity stack works across applications, which means a back gesture always brings you back to the screen before it, even when several applications work together on a task.
Don't iOS apps have that small black back icon on the top left that sometimes appears when you open another app?
sometimes is the problem. It's not consistent.
That's just not true.
I had to Google it and I think I've seen this thing in the status bar sometimes on iOS but it's definitely not consistent.
I wasn't even aware it was supposed to be a button
It appears every time you get into an app by clicking a notification while you're in another app, and it's 100% consistent in that context.
It is consistent when the apps are consistent.
But it will not appear if the app opens the webpage as its own View (instead of opening Safari). In that case, there is no button and the user has to hunt for how to go back. And the user has no way of knowing whether an app will open Safari or will open the webpage itself.
iOS requires users to build muscle memory in learning how to use each app. Android requires users to maintain a back stack in their head to remember what came before. Switching between the two is very jarring.
To be fair, captive browsers are also a plague on Android apps. I despise them and especially so if there's no way to turn them off in a particular app.
Would be consistent.
Is inconsistent.
The fact that you had to explain how it works indicates that a bit more consistency might be beneficial.
It is consistent!
I don't remember ever seeing (or noticing) anything like that on ios. Do you have a screenshot?
This is for things like clicking ads in the New York Times. Safari will open, and then at the top left of the screen there will be a "< NY Times" indicator. It's below the clock and above the aA icon in the URL bar.
Not just Safari. Most any two apps that support passing things from one app to the next (e.g. via Share Sheet, or a deep link, or etc.), the next app has a back to first app.
That itty bitty teeny weeny thing? Yeah, it's occasionally there.
Swipe up from the bottom middle edge of the screen to bring that up on ios? Or do you mean something else?
Not that, it's about how you navigate through screens in the same app and in multiple apps. Since the back gesture and back stack is universal and all apps are presenting activities added to the back stack, you can seamlessly move between apps using "intents" which are abstracted messages that multiple apps understand, and even tunnel through an arbitrary number of apps, and back up through each of their screens as if they were all in the same application.
An example of an intent is "can anyone open this PDF file" or "the user wants to pick a file, can any app do that and let me know what they picked?"-- those file pickers could also be from your network browser app, or Dropbox, etc.
And since activities are serializable (well, technically the intents that led to those activities being started), Android can do this without requiring the apps deep in the app stack to be running. It can freeze those apps to reserve resources and restart them at the specific activity when the user returns, if necessary.
iOS does have limited inter-app linking (it's the tiny little back arrow and the previous app name that you'll sometimes see at the very top of the screen), but since back gestures aren't universal, the only reliable way to activate that feature is to tap it, since the app may not even understand back gestures, let alone do the extra work of relinquishing control when their own local back stack is empty.
The Share Menu is the worst. How a human being should figure that out?
If offers:
People grown up with smartphones can handle it, as usual you can adapt as long as you weren’t older than 40/50 upon introduction. Most of modern stuff is horribly designed and often unreliable (Hello AppleTV. Can we speak today about changing a WiFi-Password? Why you don’t reboot when I press the ON/OFF-Button? It is needed to workaround bugs).I have the perfect example. In safari iOS, “Share” is where the “Search in the page” feature is located! Just, why?!
Oh, thank you! Twelve years iPhone user here. Never knew it’s there.
It is also in the URL/search bar, type whatever you want to find on the page instead of a website address and the bottom option will be “On this page”.
I used this option just a couple of times when I desperately needed to find something on the page. Most of the time I’m not sure where that option is, so usually I just google it right before using.
Oh wow, that’s also pretty hidden, I never noticed it
It‘s redundant placement. You can also just use the url box to search the page. Seems like a good pragmatic approach to me.
Could they also introduce some kind of page action menu? Maybe.
How do you search the page via the url box? I don’t see the option
Oh. I’ve always used the URL/search bar. Only your post made me aware that there is also a “Search” hidden in the share-menu.
You can see that it's draggable because there's a drag indicator at the top. That's what the small elongated oval is supposed to indicate.
Hm? I don’t recognize/see a drag indicator. There is a tiny elongated black oval at bottom (like always).
No you're right, I misremembered. It is android that has a drag indicator for bottom sheets
For me, this is one of the worst things about Android. There is zero consistency in what the 'back' button does. Even as a developer this is something I struggle with, what should the back button do in a specific case? Does it go back to the previous screen or does it go back one level in a drill-down navigation (which can sometimes, but not necessarily always, be the same thing).
Sometimes it's up one level in the navigation structure, sometimes it's go to the previous screen. Sometimes it's close a dialog. Sometimes it's even close the application. Depending on the context it could any of these, and it can be unclear which one if multiple could apply. The only way to find out is press the back button and see what happens.
I hate ambiguous user interface elements. When I click on something I'd like to know what action it will trigger.
I disagree, and side with the sibling comments consensus: having switched from Android to iOS this summer, this was the largest friction for me – this and the bad onscreen keyboard, and the buggy text selection (editing URLs is a chore, holding the spacebar to move the cursor is broken when you move too far...)
Also this has always bothered me before switching whenever I used a friend's iPhone for a moment.
The trouble alread begins when some link in Safari opens a 3rd party app.
Sounds weird, but Apple could really learn a lot about UX from Google regarding this "go back" interaction.
It really was a joy how reliable it works even for inception-level nested app interactions.
On iPhone, half of app switches (at least) require me to swipe up or go to the home screen.
And positioning the unreliable sometimes-available back button at the top left has made me drop my phone at least once.
For all that's to like about iOS, "navigation patterns" are not one of them for me.
You can swipe left/right on the very bottom of the screen to switch "back" to apps. The back swipe gesture is for "in app" navigation and is much better than what Android has. The Android back button can do like a million things: dismiss keyboard, go back a page, switch apps, go home, etc. It's a mess.
I'd argue this is a good thing. In Android UX guidelines, the "back" button's "promise" is not that you go back to a specific item, it's that you unwind your most recent action (notably, not unwind state, it's not an "undo" button, just that it unwinds the most recent action).
Apps get to decide what metaphor makes sense for an "action" (maybe it's a page, a screen, a dialog, etc). But users can be confident that the "back" button always takes them "backwards", even if the metaphor various apps use may differ.
Users can feel reasonably safe that the "back" button will take them "back" one 'step' or one 'action' worth, even if the app is using panels instead of pages, or modal dialogs instead of inline alerts
I think the Android approach is: the back button usually does what you want, unless what you want is consistency.
Thoughtfully designed apps tend to set up clear expectations and deliver on them. Thoughtless or malicious apps can be confusing or intentionally mislead.
Seems consistent to me?
And iOS is all that plus the ambiguity of the existence, location, and look of the button/action itself.
Small note, most people go back using the gesture navigation for Android now days. It's also consistent in going back a screen normally.
It's analogous to the browser navigation. It's entirely to the app to decide which screens and interactions are part of the navigation tree and which are not.
Not true at all. Read Apple’s HIG it’s all spelled out there. Some apps deviate from this but that isn’t the fault of iOS. Instagram on android is just as bad.
Go to Clock, Sleep|Wake up (yes that's really the label!), click Change, scroll down a bit, click "Edit sleep schedule in health". It opens another app in hyperlink style, which the article recommends against.
A lot of apps deviate constantly from the "blessed" patterns. The result is that as a user new to an app (or update), you have to click and gesture around to see what happens, and probably miss a lot of UI features because of that.
Most of the alternatives would be worse for either usability or maintenance, or both:
- don't track sleep in the Health app
- track sleep, don't provide alarms/notifications for the sleep/wake along with the schedule in the health app
- put almost all the UI for Health's sleep/wake in the Clock app instead
- provide almost identical UI in both the clock and health apps
I'm sure there are better implementations of the current UI tho'. E.G still link to the 2nd app, but have it _after_ the normal alarm clock in the vertical/reading order, and use better wording to explain the function and behaviour.
I wonder if they're trying to avoid having Clock ask for permission to read the HealthKit data, which presumably they would have to do in most other possible implementations.
It's the right thing to do, but it shows how broken "hyperlinking" is on iOS: after clicking the button, you get the health app on some specific screen. That screen has a "< Settings" button on the top left, which will obviously take you somewhere unrelated now. Assuming that we somehow recovered from clicking that, in the OS status bar there is a minuscule and ephemeral "< Clock" label, which _does_ take you back to the clock app, but disappears as soon as the user switches applications or to the home screen. However, the screen that took me there in the first place was some kind of "modal" which closed itself when the clock app went into background, so that's also broken.
But here's the key question - were you able to edit your sleep schedule? Do you think other people have been able to edit their sleep schedules?
UI has no 'correct' approach, the only thing that matters is if people can happily use it.
Then I suppose it's the fault of the App Store reviewers. The point is that Android handles the activity stack on the OS level and has much stronger control over what a back button does.
There's this phenomenon where people only notice an interface if they don't like it. There's heaps of well documented and well used patterns in lots of apps in iOS, I think when rplnt says "There's no patterns" he's happily ignoring everything that works.
I think Apple hasn't done this because it's not practically possible.
For example, if it's possible to change the content of a view (which it obviously should be), then it's possible to remove all content and and replace it with all new content. If triggered by some user action, this effectively is "going to a new screen". But the OS-level gesture won't work since the developer in question didn't use your proposed OS API call "createNewView", but instead just replaced the content of the current view.
However, Apple could make use of this OS API mandatory in order to pass review. Although I still think there's some subjectivity around what is "a new view" (that I can "go back" from) versus "an existing view with stuff changed" (that I can't "go back" from).
It is very possible to do so that
* There is a dedicated control for going back to a previous view / state, that control is always positioned by the OS in a predefined location, and cannot be removed or disabled.
* The OS automatically does the right thing, that is, navigates to the previous view, unless the developer has jumped through hoops to override this behavior (e.g. to warn about unsaved data).
Android does this, and it's very helpful and natural.
Gesture support on iOS feels natural because it's implemented by the application (?).
On Android back gestures usually aren't 1:1 because they behave like a back button. Swipe and let go, then the back action is executed.
Firefox on desktop Linux has better gestures than Android, namely swiping to the right goes back and swiping to the left goes forward. Firefox on Android doesn't, because the OS treats swiping in either direction as a back-button action.
iOS does this too. It doesn’t mean I can’t override it. And that’s what many, many, many people do. Try using an app made in Unity on iOS or Android. It immediately feels janky.
iOS has many faults, but not being able to go back is not one of them.
A navigation that I'd love to see on Android is swiping right to go forward
That would be quite hard to do without a special case, since the default action of the back button is to pop the current activity off the stack and return you to the prior one. (I know too much about this from trying to add a button in an existing app to do the same thing)
It's a shame it's not available though. It'd be useful for navigating tab history in firefox. (currently, hold down back button and select from menu)
Can you achieve this in Android Firefox when you don't have the UI back button enabled (because gestures are the default)?
Android's back button gesture isn't handled by the app, and Android currently doesn't have a global "forward" key. I don't think we'll see a forward swipe soon.
I'm also not so sure about the ergonomics of thst approach, I'm sure left-handed people would get annoyed that either their back gesture is now harder to pull off, or their forward gesture is pointing backwards (and doesn't work on right-handed phones).
One of my pet peeves is that there is no universal equivalent of a context menu. There’s long press, there’s the share button that is often used not just for sharing but for all kinds of context-menu-like functions, there are other buttons or hamburger/ellipsis menus, there’s the swipe left/right on an item with additional actions appearing and sometimes a “More…” secondary menu, there’s the text-edit “tap a selection and wait for a second or two for some options to appear”, and so on. The respective menus that may or may not appear also differ in their looks.
The lack of a uniform UI pattern for what is right-click on the desktop already surprised me way back in iPhone OS 3. Long press would have been the obvious choice, and you could have had a uniform context-menu function everywhere. Users would just learn “when in doubt, long-press for any and all additional actions” and wouldn’t have to try different gestures, look into the share menu or other random menu buttons.
The swipe sideways on an item is the worst, i once spent half an hour trying to delete a sleep record in the health app.
Even if you know an action is under swipe, it is often difficult to avoid triggering the default swipe action and to drag just the right amount if you really want to select one of the non-default swipe actions, or conversely (especially on iPad) you may have to drag inconveniently far to trigger the default swipe action. It’s just a bad UI pattern.
It is fixed on the OS level, but some people claim hybrid apps are indistinguishable between native apps. Except every time:
- Swipe LTR (on a LTR locale) does not go back
- The back button's size is exactly as big as it looks, instead of extending quite a bit below it's visible box in the navigation bar
Do you mean on iOS? Because on Android, both swipe from edge rightward and swipe from edge leftward both mean back when using the default gesture navigation settings, regardless of the RTL/LTR direction of the content or device locale. This is a side effect of the fact that Android does not have a notion of forward. I'm not convinced they should have done this, but eh.
I wasn't sure, I guess books are read from the same side in every culture?
iOS UINavigationController and the SwiftUI equivalent support it by default and it takes effort (or a crappy hybrid implementation) to stop it from working.
Android was, I think, even better in the early days.
It had 4 hardware buttons: back, menu, home and search. They lost menu and search along the way. Sure, they weren't always needed, but they were common enough functions that could warrant dedicated buttons. Now, everything is different and you never know how to popup a menu (hamburger menu? where? or is it a swipe?), even though it is always the same functionally.
Well, the menu and search were always context-dependent from what I remember (ie, on devices that used on-screen buttons as opposed to hardware buttons, they were only present when the app requested them to). This created a situation where the buttons were sort of weirdly sized and bolted onto the side of the standard three button layout. This wasn't ideal- and I don't recall an app that made particularly good use of them.
Well if it's a hamburger menu than you can see it, and drag out sidebars can be checked with a drag in the middle of the screen (but not from the left edge lest you activate the back gesture), so it's pretty quick to figure out.
However I will nominate the Soundcloud app as the single worst app design I have seen when it comes to menuing. It is absolutely atrocious, and actually uses none of the above options. I'll leave it as an exercise to go try it out if anyone wants to laugh at bad app design (sorry if anyone who worked on it is reading this).
Can you expand on the design sins of the Soundcloud app? I use it a lot and have never noticed anything particularly funky. I'm on iOS.
Escaping an already-playing 30 second YouTube advert on their iOS app may be the most challenging UI experience in the modern era. I've landed on forcefully closing the app, and re-opening it as the only escape.
I generally prefer iOS to Android but man you’re so right. The number of times I’ve had to forcefully close an app (not just YouTube) because I cannot figure out how to go backwards in the UI stack.
Action which I find much more useful than Back is Up. I’m always annoyed when someone hands me their Android to do something and I need to go through 10 screens hitting Back instead of Up. I almost never want Back. I want Up. This is also reflected in my use of Finder on Mac e.g. where I often hit Cmd+Up, but never Cmd+Left.
Back can mean multiple things? That's a good thing? Sheesh. The Android back button as been broken for years.
The worst case of all is when a submenu on the control panel is open, then it doesn't matter if I swipe from the bottom or try the back gesture, I need to click somewhere in the screen to leave this menu.... Inconsistency FTW