繁体   English   中英

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

[英]iOS Different navigation bar color on different pages

如何根据用户所在页面更改导航颜色

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

您可以尝试在 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]]; }

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

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

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

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

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

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

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

斯威夫特 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)
}

这是结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM