0

我刚刚使用以下代码删除了导航栏阴影线:

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()

当我使用此代码并尝试打开属于同一导航控制器的另一个页面时,其导航栏看起来不同。我正在尝试设置相同的导航栏背景颜色和色调颜色,但它不起作用。但是,当我删除这些代码时,我使用的所有页面都可以正常工作。我该如何解决这个问题?

截图:

主视图控制器

第二视图控制器

4

2 回答 2

1

这是常见的行为。当您设置 backgroundImage 时,无法设置新颜色。您需要将 setBackgroundImage 设置为 nil,然后在下一个 ViewController 中设置您想要的新颜色。

这个库可以帮助你轻松地做到这一点https://github.com/MoZhouqi/KMNavigationBarTransition PS:通过链接查看示例

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        configureAppearance()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        configureAppearance()
    }

    func configureAppearance() {
        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
        self.navigationController?.navigationBar.shadowImage = UIImage()
    }
}


class SecondViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        configureAppearance()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        configureAppearance()
    }

    func configureAppearance() {
        self.navigationController?.navigationBar.setBackgroundImage(nil, for: UIBarMetrics.default)
        self.navigationController?.navigationBar.barTintColor = UIColor.yellow
    }
}
于 2017-11-27T15:26:06.283 回答
0

看起来你的导航栏是半透明的,但你的视图控制器没有在它后面延伸,所以你需要默认为黑色的窗口。

任何一个

  1. 选中该框以在界面生成器的顶部栏下扩展 VC
  2. 将 UIApplication.shared.keyWindow?.backgroundColor 更改为 .white
  3. 使您的导航栏不透明
于 2017-11-27T15:23:44.670 回答