Swift 3:如何反转透明导航栏?

时间:2017-02-19 20:32:19

标签: ios swift twitter swift3 navigation

我正在尝试使用twitter API创建一个推特应用程序,模拟真实的应用程序。在时间线视图中,我有一个常规导航栏,当用户点击用户配置文件时,配置文件视图有一个透明栏,以便可以显示用户的横幅图像。我使用以下代码在用户配置文件视图中使导航栏透明:

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

我遇到的问题是当我从配置文件视图返回时,时间线导航栏已经搞砸了(下面的屏幕截图)。我猜这是因为我在视图控制器中为配置文件视图更改了导航栏的某些方面,并且当我返回到时间轴视图时,这些方面仍然存在。

如何反转导航栏透明度以修复不稳定的导航栏?在时间轴视图控制器中,我尝试使用以下代码尝试反转它,但它不起作用。

self.navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
self.navigationController?.navigationBar.shadowImage = nil
self.navigationController?.navigationBar.isTranslucent = false

带有常规导航栏的时间轴视图

Timeline view with regular navigation bar

带透明导航栏的个人资料视图

Profile view with transparent navigation bar

从个人资料视图返回后,带有不稳定导航栏的时间轴视图

Timeline view with wonky navigation bar after returning from profile view

3 个答案:

答案 0 :(得分:3)

同样的情况也发生在我身上。后来,我注意到我没有在正确的生命周期中改变导航项的属性。在viewWillAppear时间轴视图控制器中使其变为不透明,并在离开时间轴视图控制器之前使其透明,在viewWillDisappear中。 它可能与此有关吗?

答案 1 :(得分:0)

@Julian,我和你有同样的问题。我有一个带红色导航栏的主视图,并希望详细视图导航栏是透明的。我设法让它工作,但回到主视图时遇到了同样的故障。导航栏保持透明1.5秒左右,然后恢复原来的红色。我无法通过设置导航栏的样式解决它,但设法以不同的方式修复它。这不是一个首选的解决方案,但现在花了我这么多时间,我没关系。

好吧,我做的是创建一个ImageView,并在导航栏下对齐自动布局。导航栏的高度为44像素,因此ImageView获得了y位置-44。我给了ImageView导航栏的红色,这样当它透明1.5秒时,用户实际上看到了ImageView而不是导航栏颜色。

我希望这对你也有帮助。

答案 2 :(得分:0)

在您要更改导航栏的viewcontroller中,执行类似的操作

override func viewWillAppear(_ animated: Bool) {
    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    navigationController?.navigationBar.shadowImage = UIImage()
    navigationController?.navigationBar.isTranslucent = true
    navigationController?.view.backgroundColor = .clear
    super.viewWillAppear(animated)
}

override func viewWillDisappear(_ animated: Bool) {
    navigationController?.navigationBar.isTranslucent = false
    navigationController?.view.backgroundColor = .blue
    super.viewWillDisappear(animated)
}