【发布时间】:2018-01-25 10:58:02
【问题描述】:
我创建了一个新项目。我有一个NavigationController。在RootViewController 中,我有一个containerView,其中有一个表格和一个单元格。如果我点击单元格,我会推送一个新的UIViewController。所以我的Main.storyboard 看起来像这样:
我想要什么:
我想先拥有一个白色的NavigationBartitle。然后推到secondVC 我想将NavigationBarTitle 更改为黑色。然后点击返回颜色应该变回白色标题。
我做了什么:
我做了一个自定义NavigationViewController。在那里我改变了函数willShow viewController。在本文中,我写了titleColor 应该根据navigationController 更改为哪个屏幕而更改。
我的代码:
import UIKit
class SettingsNavigationViewController: UINavigationController {}
// MARK: - Controller Lifecycle
extension SettingsNavigationViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
}
override var preferredStatusBarStyle: UIStatusBarStyle {
guard let child = self.childViewControllers.last else {
return .lightContent
}
return child is ViewController ? .lightContent : .default
}
}
// MARK: - NavigationController Delegate Implementation
extension SettingsNavigationViewController: UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
let isSettingsContainer = viewController is ViewController
let backgroundColor = isSettingsContainer ? UIColor.cyan : UIColor.white
let titleColor = isSettingsContainer ? UIColor.white : UIColor.black
let image = isSettingsContainer ? UIImage() : nil
navigationController.navigationBar.shadowImage = image
navigationController.navigationBar.setBackgroundImage(image, for: .default)
navigationController.transitionCoordinator?.animate(alongsideTransition: { (context) in
navigationController.navigationBar.tintColor = titleColor
navigationController.navigationBar.barTintColor = backgroundColor
navigationController.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor : titleColor]
})
}
}
发生了什么事:
如果我将屏幕更改为seconndVC,navBarTitleColor 将变为黑色。如果我点击后退,它会保持黑色。但它应该变成白色。
完整的项目我也上传到了github:https://github.com/Sonius94/stackNaviTitle
【问题讨论】:
-
您面临的问题是什么。现在它可以满足您的需要,我认为
-
没有。我在设置。我点击 pushVC,所以我登陆 secondVC。那里的标题颜色是黑色。然后我点击返回我再次处于设置状态,标题仍然是黑色而不是像@LalKrishna 那样的白色
-
它适用于我的 iPhone 6、iOS 11.1.2
-
这很奇怪。嗯,你是在 github 上下载我的项目还是自己创建的?如果它是你自己的,我可以看到你的项目吗?也许我能找到不同之处。
-
我分叉了你的项目。而已。相同的代码。
标签: ios swift uinavigationcontroller uinavigationbar