如何在用户所在的页面上更改导航栏颜色 ?
我想做类似于Vine应用程序在探索类别中使用的内容,当用户点击某个类别时,它会以渐变格式变成按钮的颜色。有关如何做到这一点的任何想法?
答案 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)
}