UINavigationBar isTranslucent false 但保持透明

Posted

技术标签:

【中文标题】UINavigationBar isTranslucent false 但保持透明【英文标题】:UINavigationBar isTranslucent false but maintain transparency 【发布时间】:2016-10-11 22:45:04 【问题描述】:

我目前有一个项目设置,在注册期间我使用 UINavigationController 来管理视图控制器,作为设计的一部分,我使用以下代码将 UINavigationBar 设置为透明:

    let navBar: UINavigationBar! =  self.navigationController?.navigationBar
    navBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
    navBar.shadowImage = UIImage()
    navBar.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
    navBar.tintColor = UIColor.white
    navBar.barTintColor = UIColor.clear

这允许我使用导航控制器的层次结构来管理向后/向前移动,并且工作正常,除了当我显示视图控制器时,我拥有的任何视图(通过自动布局设置)都会执行“跳跃”动作进入正确的位置(就像this question's video https://vid.me/9kB5)。一些搜索使我尝试了以下两种解决方案

1.) 取消选中延伸边缘 - 在我的故事板视图控制器中的顶栏下 2.) 将导航栏的半透明设置为 false

navBar.isTranslucent = false

这解决了跳跃动作并导致视图在加载时就位,但问题是导航栏现在变成了 barTintColor(对于 UIColor.clear 最终变成黑色)。似乎我无法同时保持透明度和半透明。 Stack 上很多类似的问题都有设置颜色且不透明的导航栏。

我想到的下一个方法是我必须摆脱 UINavigationController,而是在我的每个注册视图控制器上实现后退按钮,但我希​​望尝试使用导航控制器来解决这个问题。

是否可以将 UINavigationBar 的半透明设置为 false 但保持透明?

编辑:下面是带有 isTransluscent = false 代码的导航栏的图片:

【问题讨论】:

【参考方案1】:

尝试更改“alpha”属性。确保您在主线程上对导航栏所做的一切。

解决方案2:您可以为导航栏背景设置特定的UIImage。

【讨论】:

我试过: navBar.isTranslucent = false DispatchQueue.main.async navBar.subviews[0].alpha = 0.0 但这使导航栏保持黑色。对于解决方案 2,我尝试将导航栏背景设置为 1x1 透明 png:navBar.setBackgroundImage(UIImage(named: "Blank"), for: .default) 但它仍然有一个黑色背景导航栏。

以上是关于UINavigationBar isTranslucent false 但保持透明的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationBar

UITableView 滚动 UINavigationBar

UINavigationBar 一个有样式的view

UINavigationController改变UINavigationBar导航条标题颜色跟字体

UIBarButton 未在 UINavigationBar 中显示

`UINavigationBar` 弯曲扩展?