Fixing Safari View Controller [With an app example]
No more disappearing buttons


With iOS 9, Apple introduced something called the Safari View Controller. It is, essentially, a plug-and-play web view that developers can use in lieu of building their own web viewer. The benefits of this are numerous: much less coding and maintenance for developers, a unified experience across apps for users, and the Safari View Controller can take advantage of the same privileges of Safari proper, such as saved passwords and content blockers.

The UI, however, has one serious flaw. It is a pain in the ass to dismiss.

I became acutely aware of this problem upon installation of Tweetbot 4. Previously, in Tweetbot 3, when a user tapped a web link in the timeline, the website slid in from the right. Getting back to the timeline was simple: either tap the always-present back button in the upper left corner, or, use a swipe-to-the-right gesture from the left edge. This made it incredibly easy to pop in and out of links within the timeline.

Tweetbot 4 now takes advantage of the Safari View Controller. However, there is only one way to dismiss the view: the Done button waaaayyyy up in the upper right corner.

But here is the egregious error: when you scroll, the Done button goes away. That’s right: your only escape hatch is hidden as soon as you move.

The hard-to-reach-and-sometimes-hidden Done button makes browsing links in Tweetbot way slower. I have even turned Reachability back on in an effort to make things a little easier. The horror.

Thankfully, I think there is a pretty easy fix that I hope Apple would consider.

Step 1: Do not hide the UI chrome when scrolling. Our phones are huge now. The real estate is less precious. Whatever benefit is derived from those few extra pixels is immediately lost by, you know, not having buttons anymore.

Step 2: Remove the Done button from the top nav bar, and add a Close button to the bottom toolbar. Ahh. So reachable.

You might think this problem could be solved simply by adding a back swipe gesture to the existing Safari View Controller. This raises a couple problems though, namely that that gesture needs to be saved for navigating back from within the Safari web view.