4

I have default preferences for uinavigationbar:

UINavigationBar.appearance().barTintColor = .red
        UINavigationBar.appearance().titleTextAttributes = [ NSAttributedStringKey.foregroundColor:#colorLiteral(red: 1, green: 0.99997437, blue: 0.9999912977, alpha: 1)]
        if #available(iOS 11.0, *) {
            UINavigationBar.appearance().largeTitleTextAttributes = [ NSAttributedStringKey.foregroundColor:#colorLiteral(red: 1, green: 0.99997437, blue: 0.9999912977, alpha: 1)]
        }
        UINavigationBar.appearance().isTranslucent = false
        UINavigationBar.appearance().tintColor = #colorLiteral(red: 1, green: 0.99997437, blue: 0.9999912977, alpha: 1)

Structure: UINaviagtionController -> PostsTableViewController -> PostTableViewController.

I want to have large navigation bar on PostsViewController (with opaque background color) and transparent navigation bar on PostViewController.

In PostTableViewController i add:

self.navigationController?.navigationBar.backgroundColor = UIColor.clear
        self.navigationController?.navigationBar.barTintColor = .clear

        self.automaticallyAdjustsScrollViewInsets = false
        //self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
        //self.navigationController?.navigationBar.shadowImage = UIImage()
        if #available(iOS 11.0, *) {
            print("asd")
            self.tableView.insetsContentViewsToSafeArea = false
            self.tableView.contentInsetAdjustmentBehavior = .never
        } else {
            self.automaticallyAdjustsScrollViewInsets = false
        }

Navigation bar is BLACK. I dont understand how make it transparent... PostsTableViewController PostTableViewController

UPDATE:

git hub repository: https://github.com/Mazorati/testnavbar

i set isTranslucent = true, but large navigation becomes also transparent. Only default navigation is ok.

PostsViewController

PostsViewController

PostViewController

But i want navigationbar color to be opaque, so:

self.navigationController?.view.backgroundColor = .red
self.navigationController?.navigationBar.isTranslucent = false
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationItem.largeTitleDisplayMode = .automatic

As the result:

opaque large navigation

3D layers:

3d layers

mazy
  • 652
  • 1
  • 10
  • 18

2 Answers2

2

have you tried changing it to translucent?

self.navigationController?.navigationBar.isTranslucent = true

UPDATE:

You must remember that the navigation bar belongs to the UINavigationController which holds the views inside it, so that when you change it in one it changes for all.

The solution would be to change it to translucent in the second view controller's viewWillAppear method and change it to not translucent in the viewDidDissapear method. Play with the viewWill and viewDid appear methods until you find the right one for your needs.

gabriellanata
  • 3,946
  • 2
  • 21
  • 27
-1

Try this, this make your navigation bar transparent.

    let img = UIImage()
    navigationController?.navigationBar.shadowImage = img
    navigationController?.navigationBar.setBackgroundImage(img, for: .default)
bezoadam
  • 587
  • 2
  • 8
  • 18