UINavigationBar isTranslucent false但保持透明度

时间:2016-10-11 22:45:04

标签: ios swift uinavigationcontroller autolayout uinavigationbar

我目前有一个项目设置,在注册期间我使用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

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

1。)取消选中扩展边 - 在我的情景板视图控制器的顶栏下面 2.)将导航栏的半透明度设置为false

navBar.isTranslucent = false

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

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

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

编辑:以下是使用isTransluscent = false代码导航栏的图片: enter image description here

1 个答案:

答案 0 :(得分:0)

尝试更改“alpha”属性。确保您使用导航栏执行的所有操作都在主线程上执行。

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