[iOS 27 Beta]: tabBarController(_:shouldSelect:) delegate method silently no longer called — breaking tab selection interception

Summary

On iOS 27, tabBarController(:shouldSelect:) — the long-standing UITabBarControllerDelegate method accepting a UIViewController — is no longer invoked when the user taps a tab inside a SwiftUI TabView. Tab selection now routes exclusively through tabBarController(:shouldSelectTab:), the UITab-based variant introduced in iOS 18.

Impact

Any code that relies on tabBarController(_:shouldSelect:) to:

  • Intercept or prevent tab switches
  • Detect tab reselection
  • Propagate tab-change events to other subsystems (e.g., a JavaScript bridge in a hybrid app)

...will silently stop working on iOS 27. There are no compiler warnings, no deprecation notices, and no runtime assertions — the method simply is no longer called.

This affected react-native-bottom-tabs, a widely used open-source library, causing all tab screens beyond the first to render as blank/white after any tab tap (see: https://github.com/callstack/react-native-bottom-tabs/issues/529). The workaround is to implement tabBarController(_:shouldSelectTab:)

Reproduction

  1. Create a SwiftUI TabView with 3+ tabs.
  2. Set a UITabBarControllerDelegate on the underlying UITabBarController.
  3. Implement tabBarController(_:shouldSelect:) — e.g., to log or prevent selection.
  4. Run on iOS 26 → delegate method fires correctly.
  5. Run on iOS 27 Beta → delegate method is never called.

Request / Questions

  1. Is this an intentional behavioral change for iOS 27? If so, it constitutes an undocumented, silent API break for any code targeting UITabBarControllerDelegate. The old method still compiles and links without any warning.
  2. Will tabBarController(_:shouldSelect:) be formally deprecated with a corresponding compiler warning so developers can find and migrate affected call sites?
  3. Is tabBarController(_:shouldSelectTab:) now the exclusive interception point on iOS 27, even for apps that haven't fully migrated to the new UITab-based API?

We'd appreciate any official guidance so libraries and apps can ship iOS 27-compatible binaries with confidence.

Environment

  • Xcode 26.5 / 17F42
  • iOS 27 Beta
  • Reproducible in both UIKit and hybrid (React Native) contexts

That TabView uses UITabBarController under the hood is an internal implementation detail, and replacing its delegate or otherwise modifying the UITabBarController is not a supported path.

If you need full control over a UITabBarController within a SwiftUI view hierarchy, you can use UIViewControllerRepresentable to wrap the tab bar controller.

[iOS 27 Beta]: tabBarController(_:shouldSelect:) delegate method silently no longer called — breaking tab selection interception
 
 
Q