【问题标题】:NavigationBar title just changes once (not white again then going back)NavigationBar 标题仅更改一次(不再变白然后返回)
【发布时间】: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]
        })
    }
}

发生了什么事:

如果我将屏幕更改为seconndVCnavBarTitleColor 将变为黑色。如果我点击后退,它会保持黑色。但它应该变成白色。

完整的项目我也上传到了github:https://github.com/Sonius94/stackNaviTitle

【问题讨论】:

  • 您面临的问题是什么。现在它可以满足您的需要,我认为
  • 没有。我在设置。我点击 pushVC,所以我登陆 secondVC。那里的标题颜色是黑色。然后我点击返回我再次处于设置状态,标题仍然是黑色而不是像@LalKrishna 那样的白色
  • 它适用于我的 iPhone 6、iOS 11.1.2
  • 这很奇怪。嗯,你是在 github 上下载我的项目还是自己创建的?如果它是你自己的,我可以看到你的项目吗?也许我能找到不同之处。
  • 我分叉了你的项目。而已。相同的代码。

标签: ios swift uinavigationcontroller uinavigationbar


【解决方案1】:

可能的解决方案是,添加一个 SecondViewController 并在您的 SecondViewController 中实现以下内容:

override func willMove(toParentViewController parent: UIViewController?) {
    super.willMove(toParentViewController: parent)
    if parent == nil {
        // Add your navigation bar appearance for FirstViewController
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 2013-03-02
    • 2012-02-17
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多