我有一个要求,我必须使用一个红色大标题的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

我不完全确定这是否是一个bug,因为在撰写本文时,我们还处于第一个测试版,或者这是否是有意的行为,主要是因为我以前没有苹果的任何应用程序给大标题上色。有没有办法让这个大标题有我想要的颜色?
发布于 2017-07-12 18:53:23
有一个新的UINavigationBar属性"largeTitleTextAttribute“应该可以帮助实现这一点。
下面是可以添加到视图控制器viewDidLoad方法中的示例代码
navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.blue]

下面是一个没有largeTitleTextAttributes集的示例代码和屏幕截图,但是barStyle被设置为.black
navigationController?.navigationBar.barStyle = .black

下面是一个没有largeTitleTextAttributes集的屏幕截图,但是barStyle被设置为.default
navigationController?.navigationBar.barStyle = .default

发布于 2019-06-16 11:32:17
在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发布于 2017-06-25 23:28:34
不确定它是否是beta 1& 2中的一个bug,但是这里有一种设置颜色的方法。这是一个有点“黑客”的解决办法,但它应该工作,直到苹果修复这一点。在Objective和Swift版本中,这段代码都在viewDidAppear:方法中。
目标-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]];
}
}
}
});斯威夫特
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
} } }https://stackoverflow.com/questions/44619396
复制相似问题