显示UINavigationBar后退按钮而不按视图控制器

时间:2010-10-22 12:18:54

标签: iphone ipad uinavigationcontroller uinavigationbar

在iPad的照片应用程序中,当你点击一个相册时,一堆图片会扩展以填满屏幕 - 你在同一个视图中,它只是稍微重新排列了网格。但是在顶部,会出现一个左箭头样式的Back按钮,就好像使用了pushViewController一样 - 除了它整齐地淡入,而不是滑入。当你点击它时,它会再次淡出,而不是滑出。

有没有办法复制这种行为?到目前为止,我已经尝试了一些选项,可能只是遗漏了一些东西。我尝试了什么:

  • 设置self.navigationItem的leftBarButtonItem可以工作,但是给我一个方形按钮而不是一个有角度的Back-style - 有几个hacks在线使这个工作,比如使用图片作为按钮,但我'如果肯定没有“官方”的方法,那么只能使用它们。

  • 设置self.navigationItem.backBarButtonItem - 这通常用于在按下视图控制器时自定义后退按钮,因此它不起作用。

  • [self.navigationController.navigationBar setItems ::] - 这有效,虽然它给了我滑动动画而不是褪色。结果,我使用动画:NO使其出现。缺点:当点击Back时,你获得滑动动画,这看起来很奇怪,因为UI的其余部分保持静止。

有没有人设法复制这种效果?

提前致谢!

2 个答案:

答案 0 :(得分:0)

你的第一种方法可能是最好的。

它不一定是超级hacky,您可以使用普通UIButton并使用backgroundImageForState:titleForState:(等)将其自定义为后退按钮,然后将UIButton对象设置为customView的{​​{1}}。

现在很多应用都会定制外观和外观。无论如何感觉按钮,所以使用自定义背景图像是很正常的。如果您使用UIBarButtonItem(或resizableImageWithCapInsets:,如果您需要支持早于5.0的iOS),那么该按钮仍然可以拉伸以适应内部的任何文本,因为它是正常的stretchableImageWithLeftCapWidth:topCapHeight:文本可以本地化等等。我不认为这种方法是hacky,它是一种完全合理的方式来绕过UIButton对象的有限功能。

答案 1 :(得分:0)

迟到总比没有好。

要在不推动视图控制器的情况下显示后退按钮,请在UINavigationBar上使用pushNavigationItem:animated:popNavigationItemAnimated:。这些导致标准幻灯片动画和后退按钮的创建。但是,除了对持续时间做出有根据的猜测之外,没有办法确保您的内容动画与条形动画同时运行。

由于iOS 7有更好的API来实现此效果,您仍然可以推送和弹出视图控制器,但您可以通过UINavigationControllerDelegate中的navigationController:animationControllerForOperation:fromViewController:toViewController:提供自定义过渡动画。这样就可以完美地协调条形图和内容之间的动画。

最后,如果您之前和之后的内容由UICollectionViewController管理,则可以使用useLayoutToLayoutNavigationTransitions,这是专为照片等用例设计的。