Ios 过渡到透明的UINavigationBar(类似苹果音乐的导航栏)

Ios 过渡到透明的UINavigationBar(类似苹果音乐的导航栏),ios,uinavigationbar,transition,transparent,ios9,Ios,Uinavigationbar,Transition,Transparent,Ios9,我正在尝试将iOS音乐应用程序推送/流行转换从半透明复制到透明的UINavigationBar,同时保持UIBarButtonims可见。由于导航栏不会自行移动,我认为您需要为两个UIViewController设置UINavigationBar透明,并在透明的UINavigationBar下向UIViewController添加一个子视图,以模拟半透明的UINavigationBar。这个问题有什么解决办法吗 这些是我找到的最好的github回购: 在详细信息控制器上输入此代码 overrid

我正在尝试将iOS音乐应用程序推送/流行转换从半透明复制到透明的UINavigationBar,同时保持UIBarButtonims可见。由于导航栏不会自行移动,我认为您需要为两个UIViewController设置UINavigationBar透明,并在透明的UINavigationBar下向UIViewController添加一个子视图,以模拟半透明的UINavigationBar。这个问题有什么解决办法吗


这些是我找到的最好的github回购:


在详细信息控制器上输入此代码

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    guard self.navigationController?.topViewController === self else {return}

    self.transitionCoordinator()?.animateAlongsideTransition({ [weak self](context) in
        self?.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
        self?.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)

        }, completion: { context in
    })
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)

    guard self.navigationController?.topViewController === self else {return}

    self.transitionCoordinator()?.animateAlongsideTransition({ [weak self](context) in
        self?.navigationController?.navigationBar.setBackgroundImage(nil, forBarMetrics: UIBarMetrics.Default)
        self?.navigationController?.navigationBar.setBackgroundImage(nil, forBarMetrics: .Default)
        }, completion: { context in
    })
}

@avdyushin谢谢,伟大的链接@阿维尤辛:很酷。但我不确定苹果是否会拒绝使用该解决方案的应用。因为使用了UINavigationBar
\u backgroundView
的私有属性。你知道这件事吗?我还没有遇到问题。如果需要,请告诉我。@avdyushin链接已失效。这几乎是完美的,不是两个
setBackgroundImage
函数调用,而是一个
shadowImage
属性,在该属性中,我将其设置为新的
UIImage()
。此外,在我的视图中似乎不需要guard语句,不确定它是否会产生不同的结果,即要使其工作,演示视图控制器上的
edgesForExtendedLayout
属性不得包括顶部边缘(即与导航栏对应的边缘)。否则,在转换过程中,当扩展内容变得透明时,它将通过导航栏显示。如果使用表视图或集合视图,可能需要向下滚动才能看到这种情况。要保持
edgesForExtendedLayout
,您需要创建一个占位符导航栏或尝试类似.efremidze的解决方案,您最终是如何完成此任务的?我一直在使用此库:我已经实现了一个与您的请求一致的可配置框架:查看示例项目以了解详细信息。