【发布时间】:2014-07-07 21:57:35
【问题描述】:
如何根据用户所在的页面更改导航栏颜色 ?
我想做一些类似于 Vine 应用在探索类别中使用的操作,当用户点击某个类别时,它会以淡入淡出的格式变成按钮的颜色。关于如何做到这一点的任何想法?
【问题讨论】:
-
你可以在下面的链接stackoverflow.com/a/64598661/11280037看到答案
标签: ios objective-c colors navigationbar
如何根据用户所在的页面更改导航栏颜色 ?
我想做一些类似于 Vine 应用在探索类别中使用的操作,当用户点击某个类别时,它会以淡入淡出的格式变成按钮的颜色。关于如何做到这一点的任何想法?
【问题讨论】:
标签: ios objective-c colors navigationbar
您可以尝试在 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)
}
【讨论】: