Tab Bar position change for iPad

Hey all,

Been a while since I posted. I recently did an update to my iOS app and discovered that for iPads the tab bar has suddenly changed both position and look. It is no longer at the bottom of the screen. It’s now at the top. It doesn’t have icons any more. It looks awful. What changed and when? Is there a way to put it at the bottom and go to the way it used to be?

I’m not at home right now and can’t show a screen shot. I can post that later. I just tried running in the simulator and it still shows the old way. Maybe my iOS SDK is out of date, but this would be an awful change if there’s no way to adjust it…

iOS 26

1 Like

Hold on.

I don’t have the latest SDK installed on my Mac. The iPad I was using does not support iOS 26. And yet this still happened.

And now, you are telling me that Apple has basically different user interface elements for a phone vs. an iPad? And they are now breaking their own Navigation Bar rules?

Is there no way to utilize the old nav bar and put it back to the bottom? I would rather my apps have consistent interfaces…

Screenshots would help

The “new” tab bar position is actually a feature of iPadOS 18.

This looks like a solution but requires declares.

https://medium.com/@thisisangkur/fixing-the-unexpected-tabbar-position-in-ios-18-on-ipad-f105b8cf37d7

1 Like

Yeah, that sounds like the issue. I’m on a trip right now and the iPad I have with me is not running iOS18 at this point, so I can’t take a screenshot - I’ll do that when I get home.

So these declares - were would they be put? In the opening event of the view? That’s where I am not sure. And does this just move the position of the Nav bar or does it basically make it the same like it used to be. This was a really bad design decision by Apple. IMHO worse than liquid glass…

So if anyone wants to help me with some declares, I could use the help! :smiley:

Here’s the lines of code suggested in the article:

For the main view:

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

And for child views:

func overrideHorizontalSizeClassIfNeeded() {
if #available(iOS 18.0, *) {
if UIDevice.current.userInterfaceIdiom == .pad {
self.traitOverrides.horizontalSizeClass = .unspecified
}
}
}

So the UIDevice.current.userInterfaceIdiom function is available in UIKit. So the only ones where I would need help with then is with self.traitOverrides.horizontalSizeClassand seeing that to either .compact or .unspecified.

If no one is able to quickly help, I’ll try to figure it out and post the results here, but would love it if someone could provide some guidance..

Thanks!

Unfortunately self.traitOverrides is SwiftUI only.
But this might help: https://stackoverflow.com/questions/77974177/how-to-implement-custom-traits-in-objective-c

Why does everything with Apple have to be so difficult? Why can’t Xojo do a better job of making things easier? I program in Xojo so I don’t need to jump through hoops and read articles from StackOverflow. But yet, here I am needing to do that. Grrr…

It is supposed to look like this:

Instead it looks like this:

There’s probably a constraint that’s not being taken into account there that would push the content down a little bit, but this new toolbar is meant to float above the content anyway so…

Oh Greg, you miss my point.

I don’t want it to look like that. I want it to look the same as on the iPhone. I want it to look that way it was.

Remember, there’s iOS and iPadOS.

3 Likes

Technically right but practically and aesthetically wrong. Here are screen shots of several popular apps taken on an iPad where my app has this new awful nav bar structure yet these apps still have the nice nav bar at the bottom.

ESPN:

Kindle:

NBC:

CBS Sports:

So all of these apps use a Nav bar at the bottom of the page. So the “Oh this is now iPad OS” argument doesn’t hold water.

What are these apps using for a navigation control? Are they making their own? Is there a different control I should be using?

I bet they are all faking it with their own view controller.

That’s what I was wondering. But it’s clear then that no one likes Apple’s new awful UI design (except those Xojo users who heard Arnaud’s post I guess).

Guess I’ll have to write my own too.

Just to be clear, you can’t actually write your own view controller in Xojo, but you can simulate it.

Another possibility is that those apps haven’t been updated since before iOS 18.2 when the SDK would have been required.

Of course you can’t. Why am I not surprised.

No, I was just going to do it with buttons placed at the bottom of the screen

Oh I am pretty sure ESPN has updated their app since that time frame….That’s why I picked big name apps.

For those big name apps, they’re often written using a third party framework just so they can easily build for Android too and those frameworks have written their own controls instead of using native ones. So yeah, the reason some of those apps have the “old look” is because their frameworks haven’t been updated yet.