Как использовать UINavigationBarAppearance в iOS 13

Как вы используете этот новый объект для настройки панели навигации в iOS 13? Я попробовал следующий код в Objective-C, но он работает некорректно. Он показывает только мои текстовые атрибуты заголовка, когда контроллер представления помещается или появляется в стеке навигации.

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

Вот документация для этого объекта.https://developer.apple.com/documentation/uikit/uinavigationbarappearance?language=objc

3 ответа

Решение

Недостаточно просто создать экземпляр UINavigationBarAppearance. Вы должны установить его наUINavigationBar экземпляр (или его внешний вид прокси).

// 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.

Если вам нужна такая же настройка для всех панелей навигации в приложении, примените ее к UINavigationBar.appearance прокси.

UINavigationBar.appearance.standardAppearance = appearance;

Для меня, хотя я правильно установил внешний вид для текущего UINavigationBar, он все еще не работал.

Я узнал что тебе нужно позвонить navigationBar?.setNeedsLayout(), если вы установили обновленный внешний вид для UINavigationBar, который уже отображается.

В iOS13 вам нужно установить цвет заголовка в объекте UINavigationBarAppearance, как здесь (версия Objective C):

UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
appearance.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
self.navigationController.navigationBar.standardAppearance = appearance;
self.navigationController.navigationBar.scrollEdgeAppearance = appearance;
Другие вопросы по тегам