Взаимодействие цвета фона между большими заголовками и заголовками по умолчанию
Я изменял фон и цвет текста панели навигации при навигации по страницам с несколькими предопределенными темами, которые включают в себя несколько сплошных и прозрачных (прозрачных) цветов для фона.
Применяя большой заголовок, представленный в 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];
}
После дальнейшего расследования я узнал, -setBackgroundImage:forBarMetrics:
называется с ненулевым UIImage
и метрики UIBarMetricsDefault
нет способа сбросить его вообще. Весь стек навигации работает, так как в моем метрике есть изображение, а в других метриках ничего нет. UIBarMetricsDefaultPrompt
,
Кажется, что при изменении цвета панели навигации нет возможности использовать большой заголовок и заголовок по умолчанию. Если у кого-то возникла такая же проблема, пожалуйста, дайте мне знать, если есть обходной путь для этих настроек.