【问题标题】:Swift 3: How to reverse a transparent Navigation Bar?Swift 3:如何反转透明的导航栏?
【发布时间】:2017-07-09 00:33:18
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您是否尝试过在返回时设置带有颜色的实际图像?例如这样的:self.navigationController?.navigationBar.setBackgroundImage(UIImage(ciImage: CIImage(color: UIColor.blue.ciColor)), for: .default)

标签: ios swift twitter swift3 navigation


【解决方案1】:

我也遇到过类似的情况。后来我注意到我没有在正确的生命周期方法中更改导航项的属性。在时间线视图控制器中的viewWillAppear 中使其不透明,并在离开时间线视图控制器之前使其透明,在viewWillDisappear 中。 会不会和那个有关?

【讨论】:

  • 嗯,这似乎已经基本解决了!现在我只是得到一个奇怪的故障后效果,我的导航栏的颜色直到屏幕加载后大约半秒才出现,但我要搞砸一点!
  • 如果您在viewWillAppear 中设置颜色,也许它可以工作。祝你好运:) @Julian
【解决方案2】:

在您更改导航栏的视图控制器中,执行类似的操作

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)
}

【讨论】:

    【解决方案3】:

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

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

    我希望这对你也有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-20
      • 2018-09-21
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多