如何调试navigationcontroller.tintColor不变?

时间:2018-09-11 05:37:49

标签: ios swift

由于某种原因,我无法弄清楚为什么我无法在应用程序中更改导航栏按钮的tintColor,而且我也不知道如何找出原因。您能推荐我如何调试此问题吗?

我将其添加到我的视图控制器的viewDidLoad中:

UINavigationBar.appearance().tintColor = .green

但是,什么都没有改变,并且后退按钮和Aa栏按钮保持默认的灰色。

导航+状态栏是半透明的,位于整个应用程序中viewcontroller的背景颜色之上。

我可以在完全相同的测试应用中将barbutton更改为.green(将其添加到vc的ViewDidLoad中,确保将barbutton图像资产设置为Template,以便它们将采用我设置的颜色)。但是无论出于何种原因,同一件事在我的应用程序原型中都不会改变。

是否有一些我可能不知道的常见原因?

已添加:工具栏按钮仅通过情节提要添加。

这是代码尝试通过1个viewcontroller的viewDidLoad更改其颜色的方法:

Class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        UINavigationBar.appearance().tintColor = .green
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.isTranslucent = true
    }

}

3 个答案:

答案 0 :(得分:5)

如果您要使用全局.ppk代理,则不能在视图控制器中使用它。

如果要更改视图控制器的appearance()中的tintColor,则必须直接在控制器的viewDidLoad实例上进行设置:

navigationController

要使用navigationController?.navigationBar.tintColor = .green 代理,并为导航栏设置全局appearance(),必须在初始化导航控制器之前执行此操作。

例如,如果您在应用程序委托的tintColor中进行操作,它将起作用:

application(_:didFinishLaunchingWithOptions:)

有关原因,请参见func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { UINavigationBar.appearance().tintColor = .green return true } 文档:

https://developer.apple.com/documentation/uikit/uiappearance

“ iOS会在视图进入窗口时应用外观更改,它不会更改窗口中已有视图的外观。要更改窗口中当前视图的外观,请从视图中删除该视图层次结构,然后放回去。”

答案 1 :(得分:0)

导航栏颜色

要更改导航栏的背景颜色,请使用以下代码

navigationController?.navigationBar.barTintColor = .green

用所需的颜色更改.green

导航栏文本颜色

navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.green]

用所需的颜色更改.green

答案 2 :(得分:0)

UINavigationBar.appearance().barTintColor = UIColor(hex:"YourColorcode")
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white,
                                                        NSFontAttributeName: UIFont(name:"AvenirNext-Medium", size:19.0)]

UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.white,
                                                     NSFontAttributeName: "YourFontName"], for: UIControlState.normal)