iOS 26下UITabBarController内UINavigationController自定义titleView失效问题求助
Hey there! Let's figure out why your custom titleView isn't showing up on iOS 26 — I’ve run into similar quirks with navigation bar changes in newer iOS versions, so let’s break down the problem and fix it step by step.
The Core Problem: Missing Size Constraints for Your Custom TitleView
The biggest issue here is that you’ve created a custom UIView for your titleView but haven’t given it any explicit size constraints. When you set translatesAutoresizingMaskIntoConstraints = false, you’re telling Auto Layout that you’ll handle all layout rules, but you didn’t define a width or height for aTitleView. On newer iOS versions, the navigation bar will collapse unconstrained views down to 0x0 dimensions, making them completely invisible.
Fixed Code with Annotations
Here’s the updated version of your viewDidLoad method, with the critical fixes marked clearly:
override func viewDidLoad() { super.viewDidLoad() let aTitleView = UIView() aTitleView.backgroundColor = .gray aTitleView.translatesAutoresizingMaskIntoConstraints = false // ✅ Add these size constraints — adjust the values to match your design needs NSLayoutConstraint.activate([ aTitleView.widthAnchor.constraint(equalToConstant: 120), aTitleView.heightAnchor.constraint(equalToConstant: 40) ]) navigationItem.titleView = aTitleView navigationItem.setHidesBackButton(true, animated: false) navigationController?.edgesForExtendedLayout = .all navigationController?.setNavigationBarHidden(false, animated: true) navigationController?.navigationBar.shadowImage = UIImage() navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) navigationController?.navigationBar.backIndicatorImage = UIImage() navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage() }
Extra Checks for TabBarController Scenarios
Since your view controllers live inside a UITabBarController, keep these in mind to avoid further issues:
- If you notice the titleView disappearing when switching tabs, try moving the titleView setup code to
viewWillAppearinstead ofviewDidLoad— sometimes tab switches can reset navigation item state unexpectedly. - Double-check that you’re not setting
navigationItem.titleanywhere else in your code. A plain text title will overwrite your custom titleView instantly.
Why This Worked Pre-iOS 26
Older iOS versions were more forgiving with unconstrained views in the navigation bar, often inferring a default size based on the view’s content or parent layout. But newer versions enforce stricter Auto Layout rules, so explicit size constraints are now mandatory for custom title views.
Give this a shot — your gray titleView should pop up as expected once those constraints are in place! Let me know if you hit any other snags.




