iOS不同页面上的不同导航栏颜色

时间:2014-07-07 21:57:35

标签: ios objective-c colors navigationbar

如何在用户所在的页面上更改导航颜色

我想做类似于Vine应用程序在探索类别中使用的内容,当用户点击某个类别时,它会以渐变格式变成按钮的颜色。有关如何做到这一点的任何想法?

4 个答案:

答案 0 :(得分:2)

你可以尝试在prepareForSegue:方法中设置导航栏色调颜色(在你的控制器中使用这四个按钮),如下所示

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:"segueIdentifier here"]) { [self.navigationController.navigationBar setBarTintColor:[UIColor redColor]]; } }

当你回来时不要忘记重置导航栏的色调颜色(在viewWillAppear中这样做)

或者您可以尝试在方法viewWillAppear中的所有控制器中执行此操作:像这样

- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController.navigationBar setBarTintColor:[UIColor redColor]]; }

答案 1 :(得分:2)

Swift 3.0 的解决方案(在iOS 10上测试)

嗨!我遇到了同样的问题,最后我找到了很好的解决方案。

当您从父视图推送到子视图时,在 viewWillAppear 方法中设置导航栏的颜色可正常工作。导航栏颜色之间的过渡是平滑的。

class ChildViewController: UIViewController {

...

override func viewWillAppear(_ animated: Bool) {
       self.navigationController?.navigationBar.barTintColor = UIColor.white
    }

但它确实无法将 ParentViewController 中的条形颜色设置为原始颜色。您可能会注意到颜色的变化,看起来只是丑陋和不专业。

要在返回ParentViewController时使颜色更改顺利,请在 ChildViewController 中的 willMove(toParentViewController parent:UIViewController?)方法中执行此操作:

class ChildViewController: UIViewController {

...

override func willMove(toParentViewController parent: UIViewController?) {
     self.navigationController?.navigationBar.barTintColor = UIColor.red

由于采用了这种方法,您可以在一个导航控制器中的不同页面上设置不同的导航栏颜色,并在两种方式之间在视图之间进行平滑的颜色转换 - 转到子视图并返回到父级。

答案 2 :(得分:0)

这是如何在不同页面上更改导航栏颜色的快速版本。

您可以在要更改导航栏颜色的任何视图控制器的viewDidLoad()方法中编写此行代码。

self.navigationController!.navigationBar.barTintColor = UIColor.orangeColor()

然后你可以使用方法 viewWillAppear() 方法,这样当你从另一个不同的控制器回到同一个视图控制器时,颜色保持不变

viewWillAppear(){
self.navigationController!.navigationBar.barTintColor = UIColor.orangeColor()
}

答案 3 :(得分:0)

快速4 +

super.viewDidLoad()

    let newBackButton = UIBarButtonItem(title: "B",
    style: UIBarButtonItem.Style.plain, target: self, action: "backAction")
        navigationController?.navigationBar.topItem?.backBarButtonItem = newBackButton
    newBackButton.tintColor = .red
    // Do any additional setup after loading the view.
}

func backAction() -> Void {
    self.navigationController?.popViewController(animated: true)
}

this is the result