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 但保持透明的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 滚动 UINavigationBar
UINavigationController改变UINavigationBar导航条标题颜色跟字体