NavigationBar appearance() (tint color ..) - ios

How can I set a tint color to a specific navigation controller ?
Because by using :
UINavigationBar.appearance().barTintColor = UIColor(red: 0.1, green: 0.22, blue: 0.212, alpha: 1)
The color will be set to all navigation controllers , isn't it ?
I've tried this code but it is not working ! Why ?
let nav = UINavigationController(rootViewController: feedvc)
nav.navigationBar.appearance().barTintColor = UIColor(red: 0.1, green: 0.22, blue: 0.212, alpha: 1)

You can set the tint of a specific controller by accessing barTintColor directly:
nav.navigationBar.barTintColor = UIColor(red: 0.1, green: 0.22, blue: 0.212, alpha: 1)

appearance() is used for changing things on a global scale and it takes effect for the next instance of something that is created.
So for example if you set it in the viewDidLoad of an object which is of the same type as you are applying appearance() then it is too late as that object has already been created. However in your case you are calling it on an instance not a class and so it wouldn't work anyway as it is a class method not an object method.
That is why it is not working in your code, to change the color just set nav.navigationBar.barTintColor.

Related

Tab Bar Controller: Icon and Colors when switching to dark mode

When I switch my app to dark mode this is what happens to the tab bar. How can i make the tapped icon fully visible in the dark mode environment?
im using the runtime property tintColor to automatically change the color and it's set in this way
tintColor = Label
You should use the traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) function of UIView/UIViewController to detect changes in the interface environment (including changes in the user interface style).
Then after checking it you can change the color of the TabBar icons depending on the selected mode by using the below:
UITabBar.appearance().barTintColor = #colorLiteral(red: 0.2000651062, green: 0.1960035861, blue: 0.2000851929, alpha: 1)
UITabBar.appearance().tintColor = #colorLiteral(red: 0.2000651062, green: 0.1960035861, blue: 0.2000851929, alpha: 1)
UITabBar.appearance().unselectedItemTintColor = #colorLiteral(red: 0.7415059209, green: 0.5448099971, blue: 0.5051562786, alpha: 1)
and you can check your colors depending on your App.

UINavigationBar: Set colors in subclass

I have the following subclass:
class GeneralNavigationBar: UINavigationBar {
override func layoutSubviews() {
super.layoutSubviews()
self.barTintColor = UIColor(rgb: 0x2A5298) //Extension that converts hex to color
self.tintColor = UIColor.white
}
}
I want the title of the bar to be white. When I apply this class to a NavigationBar in the storyboard, the background gets blue (hex, as he is supposed to), but the title remains black.
It's strange, since you can alter the color of the bar in the ViewController it appears in:
self.navigationController?.navigationBar.barTintColor = UIColor(red: 204/255, green: 47/255, blue: 40/255, alpha: 1.0)
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()
This works.
Try appearance,see how..
var navbarappearace = UINavigationBar.appearance()
navbarappearace.barTintColor = UIColor(red: 204/255, green: 47/255, blue: 40/255, alpha: 1.0)
navbarappearace.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
Put the above code in AppDelegate, it should affect the whole project.
Cheers.

How would I change background color of alert view

I am working on tvOS project, I need to create custom alert view with particular background color and text.
Finally , I have got the solution,
if let next = context.nextFocusedView as? UIButton {
next.setTitleColor(UIColor.blackColor(), forState: UIControlState.Focused)
next.backgroundColor = UIColor(red: 248/255, green: 175/255, blue: 2/255, alpha: 1.0)

iOS UINavigationBar Style issues

I have an issue with UINavigationBar styling:
1) I have applied style change in the AppDelegate.swift:
//Change Navigation bar appearance
UINavigationBar.appearance().barTintColor = UIColor (red: 231.0/255.0, green: 95.0/255.0, blue: 53.0/255.0, alpha: 0.3)
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
if let barFont = UIFont (name: "AvenirNextCondensed-DemiBold", size: 22.0){
UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName: barFont, NSForegroundColorAttributeName: UIColor.whiteColor()]
}
//Status bar text change to white
UIApplication.sharedApplication().statusBarStyle = .LightContent
//Toolbar Buttons color change
UIBarButtonItem.appearance().tintColor = UIColor(red: 235.0/255.0, green: 73.0/255.0, blue: 27.0/255.0, alpha: 1.0)
UIToolbar.appearance().barTintColor = UIColor(red: 237.0/255.0, green: 240.0/255.0, blue: 243.0/255.0, alpha: 0.5)
2) I launch the app and go from main view to the connected one using push segue in the same navigation controller (this issue won't appear if I use modal segue) and unwind to the first view
3) Navigation Bar loses the title and styling, status bar also loses changed style. Though if I change it (style and title) once again in ViewWillAppear - it works fine.
The question is: should this work like that and one has to reload styling in every ViewWillAppear or am I doing something wrong?
Thanks in advance!
Michael

What is the default background color of the navigation bar in iOS 7?

I would like to set the background color of a menu to that of the navigation bar. What is the best way to do this?
The default navbar color in iOS 7 is [UIColor colorWithRed:(247.0f/255.0f) green:(247.0f/255.0f) blue:(247.0f/255.0f) alpha:1];
Swift 5
Nav bar color in light appearance:
UIColor(red: 0.969, green: 0.969, blue: 0.969, alpha: 1.0)
To get the tint color of a navigation bar, do this:
[aNavbar barTintColor]
By using this when you set the background color of your menu, you will not have to change it in case you change your navigation bar tint.
Swift 4
I am not sure the color does not change from version to version. In my app I use this:
var navBarDefaultColor: UIColor?
// save:
navBarDefaultColor = self.navigationController?.navigationBar.tintColor
//restore:
self.navigationController?.navigationBar.tintColor = navBarDefaultColor!
In Swift, it is:
UIColor(colorLiteralRed: (247/255), green: (247/255), blue: (247/255), alpha: 1)
Swift 3.0 +
UIColor(red: (247/255), green: (247/255), blue: (247/255), alpha: 1)
You can set the barTintColor to nil to restore to the default white color.
Swift 5:
UINavigationBar Default barTintColor for Light Mode.
#colorLiteral(red: 0.9763854146, green: 0.9765252471, blue: 0.9763546586, alpha: 1)

Resources