Regression in UITabBarController on Catalyst when building under Xcode 16

I am running into an issue with UITabBarController in a Catalyst app when building under Xcode 16 and running on macOS 15.

If a UITabBarController is used, the tabs are presented in an unwanted title/toolbar at the top of the window. If you have an app where your views run to the top of the window, this can obscure the content and controls that are near the top.

I created a sample application that is attached to the Feedback record (FB14293963). When building under Xcode 15, this is what the app looks like:

Under Xcode 16, it looks like this:

Beyond this simple example, using UITabBarController in a presented view controller can result in the tabs not showing at all. Also, If you switch the view in the main window to something that isn't a UITabBarController, the tabs still remain at the top.

This seems to stem from the tab bar/sidebar changes for iPadOS 18. While this approach can work for simpler apps, it may not work well at all for more complex apps and there really needs to be a way to opt out of this behavior so apps where it is not suited for can still take advantage of features in iPadOS/Catalyst 18.

Has anyone discovered a workaround or way to disable the new tab bar behavior with having to write their own version of UITabBarController?

We encountered the same issue with our Mac Catalyst app.

Even though we didn't a perfect fix we manage to get back the old UITabBar and having an empty gray toolbar but we didn't manage to fully hide this toolbar. Until we have a better fix or a way to fully hide this toolbar it's better than nothing.

  1. Instantiate an empty toolbar in your scene titleBar:
if let titlebar = scene.titlebar {
      titlebar.toolbar = NSToolbar()
      titlebar.titleVisibility = .hidden
      titlebar.toolbarStyle = .unifiedCompact
}
  1. In your view controller containing the UITabBar force the horizontal size class to compact:
 if #available(iOS 17, *) {
      traitOverrides.horizontalSizeClass = .compact
}
Regression in UITabBarController on Catalyst when building under Xcode 16
 
 
Q