iOS UINavigationBar Style issues - ios

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

Related

UINavigationBar tintColor is misbehaving

I have issue when set UINavigationBar tintColor.
It is misbehaving
I'm using xcode 11.3.1, swift 5, iOS 13.3
*MyClass
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.title = "test"
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.tintColor = #colorLiteral(red: 0.9708816409, green: 0.4246639013, blue: 0.3480253518, alpha: 1)
}
*result
real device
https://imgur.com/sONr4vq
simulator
https://imgur.com/vs5lhgR
I want to set back button color like title
I only get error on real device
Please help me
Thank you
To set back button and hide "back":
let backItem = UIBarButtonItem()
backItem.tintColor = #colorLiteral(red: 0.9708816409, green: 0.4246639013, blue: 0.3480253518, alpha: 1)
navigationItem.backBarButtonItem = backItem
You should but this code to the ViewController before push the new one.
Try access to navigationController.navigationBar instead of navigationController.view :
self.navigationController?.navigationBar.tintColor = #colorLiteral(red: 0.9708816409, green: 0.4246639013, blue: 0.3480253518, alpha: 1)
Did you try using UIColor instead of #colorLiteral?
Like
self.navigationController?.navigationBar.tintColor = UIColor(red: 0.9708816409, green: 0.4246639013, blue: 0.3480253518, alpha: 1)
//or
self.navigationController?.navigationBar.tintColor = UIColor(displayP3Red: 0.9708816409, green: 0.4246639013, blue: 0.3480253518, alpha: 1)
Edit:
Since that the above did not work for you, did you try this?
self.navigationController?.navigationBar.tintColor = self.navigationController?.navigationItem.titleView?.backgroundColor
Considering that all you want is to have both the button and title to have the same colour right?

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)

NavigationBar appearance() (tint color ..)

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.

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