Изменение цвета текста заголовка панели навигации, когда для параметра "prefersLargeTitles" установлено значение true
У меня есть требование, в котором я должен использовать UINavigationBar
с красным большим заголовком.
В настоящее время у меня есть следующий код:
func prepareNavigationController() {
let navController = UINavigationController(rootViewController: self)
navController.navigationBar.prefersLargeTitles = true
navigationItem.searchController = UISearchController(searchResultsController: nil)
navigationItem.hidesSearchBarWhenScrolling = false
navController.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.red]
}
Но это на самом деле не тонирует ярлык заголовка красным. Это результат:
![Игнорируемый цвет заголовка]()
Но изменение prefersLargeTitles
на false делает правильную вещь, а мой заголовок красный.
navController.navigationBar.prefersLargeTitles = false
![Tinted Title]()
Я не совсем уверен, что это ошибка, поскольку на момент написания этой статьи мы все еще находимся в первой бета-версии, или если это преднамеренное поведение, в основном из-за того, что у меня нет ни одного из приложений Apple, Есть ли способ получить большой заголовок для любого цвета, который я хочу?
Ответы
Ответ 1
Существует новое свойство UINavigationBar "largeTitleTextAttribute", которое должно помочь с этим.
largeTitleTextAttribute
Вот пример кода, который вы можете добавить к вашему представлению. viewDidLoad метод
navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.blue]
![введите описание изображения здесь]()
Вот пример кода и скриншот без набора больших TitleTextAttributes, но для barStyle установлено значение .black
navigationController?.navigationBar.barStyle = .black
![введите описание изображения здесь]()
Вот скриншот без setTitleTextAttributes, но barStyle установлен в .default
navigationController?.navigationBar.barStyle = .default
![введите описание изображения здесь]()
Ответ 2
Не уверен, что это ошибка в бета-версии 1 и 2, но вот способ установить цвет. Это немного "хакерское" обходное решение, но оно должно работать до тех пор, пока Apple не решит это. В версиях Objective-C и Swift этот код используется в методе viewDidAppear:
.
Objective-C:
dispatch_async(dispatch_get_main_queue(), ^{
for (UIView *view in self.navigationController.navigationBar.subviews) {
NSArray <__kindof UIView *> *subviews = view.subviews;
if (subviews.count > 0) {
UILabel *label = subviews[0];
if (label.class == [UILabel class]) {
[label setTextColor:[UIColor redColor]];
}
}
}
});
Swift:
DispatchQueue.main.async {
for view in self.navigationController?.navigationBar.subviews ?? [] {
let subviews = view.subviews
if subviews.count > 0, let label = subviews[0] as? UILabel {
label.textColor = UIColor.red
} } }
Ответ 3
То, как вы делаете это в iOS 13, изменилось, теперь вы используете класс UINavigationBarAppearance
как это…
let appearance = UINavigationBarAppearance(idiom: .phone)
appearance.largeTitleTextAttributes = [.foregroundColor: UIColor.systemRed]
appearance.titleTextAttributes = [.foregroundColor: UIColor.systemRed]
appearance.backgroundColor = .white
navigationItem.standardAppearance = appearance
navigationItem.scrollEdgeAppearance = appearance
Ответ 4
Здесь рабочий код для использования больших заголовков и устанавливает цвет текста небольших и больших заголовков на белый, как на iOS11 +, так и на старых версиях iOS.
// Will apply to versions before iOS 11
navigationController?.navigationBar.titleTextAttributes = [
NSAttributedStringKey.foregroundColor: UIColor.white
]
if #available(iOS 11.0, *) {
navigationController?.navigationBar.prefersLargeTitles = true
navigationController?.navigationBar.largeTitleTextAttributes = [
NSAttributedStringKey.foregroundColor: UIColor.white
]
}
(Раньше была ошибка в Xcode, но теперь она исправлена)
Ответ 5
При использовании раскадровки просто измените цвет заголовка "Большие текстовые атрибуты" в Инспекторе атрибутов панели навигации:
![enter image description here]()