Disable new tab bar look

Hi, I am trying out the new UITabBar stuff in iOS18, and I don't think it'll be a good fit for my app. Is there a way to revert to the old iPad UITabBar look and placement that we've been using before? I don't want to make such a big change like this just yet, but I would need to make other changes to the app as well and I don't want to use the new UITabBar just yet. Is there a way to achieve this?

Answered by DTS Engineer in 790193022

There's a new API in UITabBarController to hide the tabBar under isTabBarHidden

I have submitted a support ticket FB14926690. I encourage each of you to submit one, so we can have responses from Apple.

Is there anyone on this thread who is running iOS18.1 Beta 3 on their device that has noted any changes to the iPad tab bar behavior?

I have a Catalyst-enabled app with a UITabBarController for view switching and a custom "tab bar" (actually a UICollectionView).

In my case, I wanted to hide this new tab bar and side bar. Here is the workaround I needed to do to accomplish that, as setTabBarHidden didn't work for me. Posting here in case it helps anyone else.

internal class MainTabBarController: UITabBarController {
  internal override func viewDidLoad() {
    #if targetEnvironment(macCatalyst)
    mode = .tabSidebar
    sidebar.isHidden = true
    #else
    setTabBarHidden(true, animated: false)
    #endif
  }
}

I agree with many. For those of us who have great working apps that have a look and feel perfectly designed for the last 17 years+. For Apple designers to suddenly determine their 'new' an d probably inexperienced designer change is a 'value add' are grossly mistaken. Give the developers who have designed great apps for decades some respect and don't break the look and feel and/or generate hours or weeks of 'redesign' to fit some new employees 'vision'.

Any progress on this? Where can I complain LOUDLY?! Our app has this stuff on the bottom of the screen ergonomic reasons and just can't be moved.

This is disastrous!

we have a highly customized UI in our app, and the floating tab covers the navigation item title!

I have a solution that works very well to restoring the old tab bar layout: https://stackoverflow.com/a/78902044

I have it working in my production app already, and haven't had any issues.

if #available(iOS 18.0, *) && UIDevice.current.userInterfaceIdiom == .pad {
    traitOverrides.horizontalSizeClass = .compact
}

The above code resolved this for me. horizontalSizeClass .compact sets the tab bar to the previous "normal" mode.

Thank you!

I confirm that this works!

The solution:

traitOverrides.horizontalSizeClass = .compact

does seem to work on iPads. However, it does not seem to work for iPad apps running on MacOS unfortunately.

On MacOS, it will show both the old traditional bottom tabbar, as well as the new one on top. And in my case at least, they can get out of sync with each other which is a mess.

Just come across this problem in one of my apps that has the bottom tab bar as an important part of the app design, the change destroys the look and feel of the app completely and will require months of redesign to try integrate this new format. In the mean time this will make the current app unusable if the user upgrades the OS, and seems to crash the app in some situations that use a custom tab bar. Very annoying and poorly thought out change to the OS without giving us developers any time to come up with reasonable solutions.. what the hell are they thinking?

traitOverrides.horizontalSizeClass = .compact

If you use .compact and your app has more than 4 tabs the 5th tab will have a More... option, which is not what you want. To restore the same functionality you have to use the following

traitOverrides.horizontalSizeClass = .unspecified

traitOverrides.horizontalSizeClass = UIUserInterfaceSizeClassUnspecified;

For me, UIUserInterfaceSizeClassUnspecified was much closer to what I need.

[just noticed this is redundant with prior comment ;)]

Can confirm that putting the below inside viewWillAppear returns iPad and mac to using the tabbar along the bottom. No need to build your own alternative tab bar. This approach causes a lot of issues if you have customised the tab bar at all.

I am gobsmacked that Apple would force such a drastic change without an option to revert. We are relying heavily on the image as part of the tab bar, as we update one of them to let the user know there has been a change. This is a core peace of our app and it just disappears without notice. We have been getting crashes from this on macs due to this. Beyond belief

if #available(iOS 18.0, *), UIDevice.current.userInterfaceIdiom == .pad {
			
			// Both iPad and Mac, as mac is running "Designed for iPad"
			traitOverrides.horizontalSizeClass = .unspecified
			
			
			if ProcessInfo.processInfo.isiOSAppOnMac {
				/// Fix for macOS Sequoia: without it, the tabs
				/// appear twice and the view crashes regularly.
						
				/// Hides the top tabs
				self.mode = .tabSidebar
				self.sidebar.isHidden = true
			}
		}

I filed a feedback (FB14293963) on issue with the Mac and tab bars, complete with a sample app to reproduce the problem, in mid July. After hearing nothing for a while (feigned surprise), I contacted DTS. They told me they were aware of the issue and keep watching my feedback on the problem.

That it still hasn't been addressed or responded to makes me think Apple just doesn't care. The entire feedback system is fundamentally broken is so many ways. The past few years it seems like a complete in time. Next year, I don't think I'll bother filing anything.

Disable new tab bar look
 
 
Q