我正在尝试使用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
带有常规导航栏的时间轴视图
带透明导航栏的个人资料视图
从个人资料视图返回后,带有不稳定导航栏的时间轴视图
答案 0 :(得分:3)
同样的情况也发生在我身上。后来,我注意到我没有在正确的生命周期中改变导航项的属性。在viewWillAppear
时间轴视图控制器中使其变为不透明,并在离开时间轴视图控制器之前使其透明,在viewWillDisappear
中。
它可能与此有关吗?
答案 1 :(得分:0)
好吧,我做的是创建一个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)
}