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

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.

I have filed similar issues with the elevated tab bar. If there is a button in the navigation bar, and there is a title. The layout breaks and the navigation bar occupies 2 or 3 times more height as it should. FB15415594

To get the old look just call this ...

UserDefaults.standard.register(defaults: [ "UseFloatingTabBar": false, ]) ` .... in AppDelegate's didFinishLaunchingWithOptions.

Disable new tab bar look
 
 
Q