Я менял цвет фона и текста панели навигации при навигации по страницам с несколькими заранее определенными темами, которые включают в себя несколько сплошных и прозрачных (прозрачных) цветов для фона.
При применении большого заголовка введенов iOS 11 для некоторых контроллеров представления я обнаружил некоторые ограничения, использующие большой заголовок:
- Чтобы изменить цвет фона для большого заголовка, следует использовать свойство
UINavigationBar.barTintColor
. - Как этосвойство не работает для заголовка по умолчанию, фоновое изображение должно быть установлено с помощью
UINavigationBar.setBackgroundImage(_:for:)
передаваемого параметра UIBarMetrics.default
.
Наше приложение должно динамически изменять тему панели навигации во время навигации, и если оно нажимаетКонтроллер представления без большого заголовка и обратно в корень (который использует большой заголовок), область строки состояния в верхней части панели навигации внезапно становится пустой и никогда не возвращается в исходное состояние.
Вот фрагмент для измененияТема панели навигации:
// This snippet is always called in -viewWillAppear(_:)
UINavigationBar *navigationBar = self.navigationController.navigationBar;
UIColor *backgroundColor; // can be clear, solid, or any other colors
navigationBar.backgroundColor = backgroundColor;
if (isTransparent) {
[navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefaultPrompt];
} else {
[navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
[navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
}
После дальнейших исследований я нашлаt если -setBackgroundImage:forBarMetrics:
вызывается с ненулевым UIImage
и метриками UIBarMetricsDefault
, его невозможно сбросить вообще.Весь стек навигации работает, поскольку в данной метрике есть набор изображений, а в других метриках ничего нет, в моем случае UIBarMetricsDefaultPrompt
.
Кажется, что при изменении цвета навигации нельзя использовать большой заголовок и заголовок по умолчанию.bar .. Если у кого-то была такая же проблема, пожалуйста, дайте мне знать, если есть обходной путь для этих настроек.