当您点击图像时,内置的照片应用程序会淡入/淡出导航栏。这样照片应用程序允许全屏查看。
它是如何做到的(淡化效果)?
据我了解navigationController?.navigationBar.alpha
不再起作用(因此您不能以这种方式对其进行动画处理)。
最佳答案
分享我所有的发现。
上的投诉模式
坦率地说,我感到有点生气/就像一个傻瓜,我不得不为实现 Apple 应用程序中存在的简单事物而奋斗。
投诉模式关闭
首先,这里有一些上下文。我正在使用由 navigationController 提供的导航栏(与手动删除的独立栏相比)
我发现了几种方法。我会提到所有这些(即使我没有成功使用它们)
1)navigationBar alpha的动画变化
UIView.animateWithDuration(0.1, animations: {
navigationController?.navigationBar.alpha = 0
}, completion: nil)
@rmaddy 在这里提到它对他有用。但是,我相信他有一个独立的栏(与由 navigationController 管理的栏相比)。
我用了一个工具Reveal检查 UI 层次结构并发现几件事。
- 有一个隐藏的导航栏(
navigationController?.navigationBar
正在引用它)。因此,您可以将 alpha 更改为您心中的喜悦,但这些更改将不可见。然而,还有另一个 navigationBar 。我假设它在 navigationController 的一些私有(private)成员中被引用(我们称它为私有(private) navigationBar)。它是可见的,这就是显示在 View 顶部的内容。
2) 使用 setNavigationBarHidden:animated:
这是隐藏/显示导航栏的标准方式。它的动画方式不同(它滑动/向上和向下)。但是,如果它适合你,就选择这个,因为它简单干净。
navigationController?.setNavigationBarHidden(true, animated: true)
此外,您可以将其包装在 UIView.beginAnimations、UIView.commitAnimations 中以将其与其他一些东西一起制作动画(使其更流畅)
3) 私有(private)导航栏 alpha 的动画变化。
这对我有用:
let privateNavigationBar = self.superview?.superview?.superview?.superview?.superview?.superview?.subviews[1]
UIView.animateWithDuration(0.1, animations: {
privateNavigationBar.alpha = 0
}, completion: nil)
我将通过层次结构向上获取一个包含私有(private)导航栏的 View (这是该 View 的第二个 subview )。
但是,这种方法有多个缺点:
UINavigationBar
解决这个问题。 4)使navigationBar透明并将背景图像设置为透明并更改其上的alpha channel 。
我找不到我在哪里读到这个想法。有几个提到。
有Apple example app它显示了如何自定义 NavigationBar,包括使其透明。
有趣的是,这个示例应用程序对我有用(导航栏在其中是透明的)。但是,当我在我的应用程序中尝试此代码时,它不起作用(我仍然没有弄清楚这是怎么回事)。像往常一样有一堆变量(可能是 Info.plist 中的一些东西,它们也是 NavigationController 的子类,也可能是 View 层次结构中的一些东西)
5) 添加独立导航栏
您可以隐藏由 navigationController 提供的栏。将您自己的添加到 UIView,将其连接到 @IBOutlet 并在其上使用 alpha 动画(很可能这也是 @rmaddy 所指的)。
我检查了,这是工作。
此方法用于 this教程。
但是,它有一个缺点:
每次看到这样的代码(写在文章里)就知道resize会有问题:
CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 64.0)
您可以将其替换为约束。我走了这条路,但偶然发现了一些问题。
6) 其他方法
我看到了另外两种方法。我不知道它们是否会起作用或有什么缺点:
这个问题中的一个:How to hide/show status bar and navigation bar by fading in/out at the same time like the Photos app in iOS 7?
这个答案:https://stackoverflow.com/a/18063898/422080
关于ios - 如何在 iOS 9 上淡入/淡出导航栏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36819359/