【问题标题】:Show a UINavigationBar back button without pushing a view controller在不按下视图控制器的情况下显示 UINavigationBar 后退按钮
【发布时间】:2011-04-29 03:26:03
【问题描述】:

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

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

  • 设置 self.navigationItem 的 leftBarButtonItem 有效,但给了我一个方形按钮,而不是一个有角度的 Back 样式的按钮 - 在线有一些技巧可以使这项工作,例如使用图片作为按钮,但我宁愿只在绝对没有“官方”方式的情况下使用它们。

  • 设置self.navigationItem.backBarButtonItem - 这个一般是用来自定义view controller按下时的后退按钮,所以没有任何作用。

  • [self.navigationController.navigationBar setItems::] - 这很有效,虽然它给了我滑动动画而不是褪色。结果,我使用 animated:NO 让它出现。缺点:点击返回时,确实会看到滑出动画,这看起来很奇怪,因为 UI 的其余部分保持不动。

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

提前致谢!

【问题讨论】:

    标签: iphone ipad uinavigationcontroller uinavigationbar


    【解决方案1】:

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

    它不一定是超级hacky,你可以使用普通的UIButton并使用backgroundImageForState:titleForState:(等)自定义它看起来像一个后退按钮,然后设置@987654324 @对象作为你的UIBarButtonItemcustomView

    如今,许多应用程序都自定义按钮的外观和感觉,因此使用自定义背景图像是很正常的。如果你使用resizableImageWithCapInsets:(或者stretchableImageWithLeftCapWidth:topCapHeight:,如果你需要支持早于5.0的iOS),那么按钮仍然可以拉伸以适应里面的任何文本,因为它是一个普通的UIButton,所以文本是可本地化的,等等。我不要认为这种方法是 hacky,它是绕过 UIBarButtonItem 对象的有限功能的一种非常明智的方法。

    【讨论】:

      【解决方案2】:

      迟到总比没有好。

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

      从 iOS 7 开始,有一个更好的 API 可以实现这种效果,您仍然可以推送和弹出视图控制器,但您可以通过 navigationController:animationControllerForOperation:fromViewController:toViewController:UINavigationControllerDelegate 提供自定义过渡动画。这允许栏和内容之间的动画完美协调。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多