导航栏颜色未保存

Posted

技术标签:

【中文标题】导航栏颜色未保存【英文标题】:Navigation Bar color is not saving 【发布时间】:2017-02-05 12:18:29 【问题描述】:

我有两个不同导航栏的视图控制器。每个导航栏都有不同的颜色。

VC1 and VC2

如果我从 VC1 移动到 VC2,我会看到不同的颜色,但如果向后移动,我会从 VC2 看到 VC1 导航栏的颜色。

View Controller 1 Returned

所以来自 VC1 的导航栏颜色没有正确保存

VC1:

import UIKit

class TableViewController_1: UITableViewController 

    override func viewDidLoad() 
        super.viewDidLoad()
        self.navigationController?.navigationBar.barTintColor = UIColor(red: 56.0/255.0, green: 208.0/255.0, blue: 125.0/255.0, alpha: 1.00)

        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem()
    

VC2:

import UIKit

class TableViewController_2: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()
         self.navigationController?.navigationBar.barTintColor = UIColor(red: 105.0/255.0, green: 28.0/255.0, blue: 56.0/255.0, alpha: 1.00)

        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem()
    

如何在VC1中制作固定导航栏颜色?谢谢你的帮助!

【问题讨论】:

【参考方案1】:

不要在 viewDidLoad 中更改导航栏的颜色,而是在 viewWillAppear 中进行:

VC1

override func viewWillAppear(_ animated: Bool) 
        self.navigationController?.navigationBar.barTintColor = UIColor(red: 56.0/255.0, green: 208.0/255.0, blue: 125.0/255.0, alpha: 1.00)
    

VC2

override func viewWillAppear(_ animated: Bool) 
        self.navigationController?.navigationBar.barTintColor = UIColor(red: 105.0/255.0, green: 28.0/255.0, blue: 56.0/255.0, alpha: 1.00)
    

【讨论】:

【参考方案2】:

如果你从 VC1 到 VC2,它们有不同的导航控制器。因此,导航栏颜色应该没有任何问题。因为他们使用不同的导航。但是,如果您从 VC1 推送到 VC2,并且当您从 VC2 移回 VC1 时,您应该在 viewWillAppear 方法中设置 VC1 的导航栏颜色。因为当您移回 VC1 时,由于 VC1 已经在内存中创建,它会继续以 viewWillAppear 运行,而不是 viewDidLoad

【讨论】:

以上是关于导航栏颜色未保存的主要内容,如果未能解决你的问题,请参考以下文章

故事板中未显示导航栏

Android BottomNavigationBar导航栏

Xcode 导航栏、标签栏、表格视图标题未显示

iOS 11 上未显示导航栏标题和导航按钮

怎样删除淘宝导航栏?

为啥ios中的状态栏和导航栏背景颜色不同