如何设置透明的导航栏?iOS 11,Swift 4,Xcode 9。

7

右边的图片是我需要的,左边的是我得到的:

1

我正在尝试制作一个透明的导航栏,在我阅读的书中写道,你只需要在首选视图控制器的viewDidLoad()方法中插入此代码:

navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.tintColor = .white

tableView.contentInsetAdjustmentBehavior = .never

但是我只得到了一个白色的导航栏。 此外,图片上条形图的差异是在这段代码中:
tableView.contentInsetAdjustmentBehavior = .never

但是对我来说它不起作用

我下载了本书章节的最终项目,一切都很正常,尽管我试图复制粘贴代码,但仍然没有任何变化

问题在于 - 我已经尝试插入这段代码:

navigationController?.navigationBar.isTranslucent = true

但是它不起作用

如果有关系的话,这本书是由AppCoda撰写的"Beginning iOS 11 programming"


@AbhishekMitra并不完全正确,您所提到的问题是使用.appearance,它用于整个应用程序。在这种情况下,它是针对单个ViewController - Ethenyl
2个回答

9
请使用以下代码:
navigationController?.navigationBar.isTranslucent = true

希望能对你有所帮助。 编辑(更新) 请使用以下代码:
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.isTranslucent = false

更新2

override func viewDidAppear(_ animated: Bool) {

        navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
        navigationController?.navigationBar.shadowImage = UIImage()
        navigationController?.navigationBar.isTranslucent = true
        navigationController?.navigationBar.tintColor = .red
    }

它必须正常工作。


我已经恢复了返回按钮,但是导航栏仍然是白色的。 - bolt
@ДмитрийМеньшиков,我认为由于你的navigationController?.navigationBar.tintColor = .white 这行代码,可以改成 navigationController?.navigationBar.tintColor = .clear,然后让我知道结果。 - Abhishek Mitra
我已经尝试在Storyboard中扩展图像,但结果仍然相同。 - bolt
@ДмитрийМеньшиков,我的错误是 navigationController?.navigationBar.isTranslucent = true 必须是true。我自己试了一下,现在完美运行。 - Abhishek Mitra
2
@ДмитрийМеньшиков 确保您添加的最顶层视图,其顶部约束不应设置为安全区域,而应设置为视图。然后上述代码就可以正常工作了。 - Chetan Rajagiri
显示剩余10条评论

2

请检查这段代码

  override func viewWillAppear(_ animated: Bool) {
        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.isTranslucent = true
    }
    override func viewWillDisappear(_ animated: Bool) {
        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.isTranslucent = false     
    }

我下载了你的项目,但是 main.storyboard 文件和其他一些文件都没有找到。 - Khawar Islam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接