Search code examples
iosobjective-cios13uinavigationbarappearance

How to use UINavigationBarAppearance in iOS 13


How do you use this new object to customize the navigation bar in iOS 13? I tried the following code in Objective-C but it's not working correctly. It only shows my title text attributes while a view controller is being pushed or popped on to the navigation stack.

UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
appearance.titleTextAttributes = @{NSFontAttributeName: font};

Here is the documentation for this object. https://developer.apple.com/documentation/uikit/uinavigationbarappearance?language=objc


Solution

  • It isn't enough to just create an instance of UINavigationBarAppearance. You have to actually set it on a UINavigationBar instance (or its appearance proxy).

    // Setup the nav bar appearance
    UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
    appearance.titleTextAttributes = @{NSFontAttributeName: font};
    
    // Apply it to a specific nav bar
    someNavBarInstance.standardAppearance = appearance;
    // There are also the compactAppearance and scrollEdgeAppearance properties that can be set as needed.
    

    If you want this same customization on all nav bars in the app, apply it to the UINavigationBar.appearance proxy.

    UINavigationBar.appearance.standardAppearance = appearance;