gpt4 book ai didi

ios - 如何让 "legally"淡出应用程序中的导航栏?

转载 作者:IT王子 更新时间:2023-10-29 08:19:34 27 4
gpt4 key购买 nike

似乎只有向上滑动才能移除带动画的导航栏。我想让它褪色,就像在 Photos.app 中一样。

更改 alpha 最简单,但是 Apple's guidelines state :

Prior to iOS v5.0, when used in conjunction with a navigation controller, there are only a handful of direct customizations you can make to the navigation bar. Specifically, it is alright to modify the barStyle, tintColor, and translucent properties, but you must never directly change UIView-level properties such as the frame, bounds, alpha, or hidden properties directly.

语言有点奇怪,因为它在 iOS 5 之前声明,但它声明您不能直接更改 alpha 值,而且它从未声明您现在可以这样做。

我不希望我的应用被拒绝。

如何像淡出状态栏一样淡出导航栏?

最佳答案

这是一个有趣的问题。

它应该非常简单:使用 UIView transitionWithView 在导航栏的隐藏和非隐藏状态之间执行交叉淡入淡出,由公共(public) API 设置setNavigationBarHidden:动画:。事实上,这适用于“淡出”导航栏,但将其淡入有问题。问题是,无论 UIView +transitionWithView: 不为动画属性(例如 frame)设置动画,导航栏都会滑入到位,除非您指定 UIViewAnimationOptionAllowAnimatedContent

对我来说,这意味着 UINavigationController 在内部将 UINavigationBar 重新定位在动画 block 中,无论是否在调用 setNavigationBarHidden:animated:。当 animate: 设置为 NO 时,此动画 block 的持续时间可能设置为“0”。

解决方案是在交叉淡入淡出过渡之前将导航栏设置为可见(无动画)。这可确保导航栏在正确的位置开始交叉淡入淡出,并且交叉淡入淡出只会显示新的非隐藏状态。

我的示例项目是一个标准的单 View 应用程序。 Storyboard上有一个 UINavigationController,它是入口点。我将此 Controller 的 UINavigationBar 的条形样式设置为黑色半透明(类似于照片应用)。导航 Controller 的 rootViewController 是一个简单的 UIViewController 和一个填充整个边界的 UIImageView(也像照片应用程序)。我在 View 上添加了一个 UITapGestureRecognizer 以在 View Controller 中调用以下代码:

- (IBAction) onShowHideNavbar: (id) sender
{
BOOL hide = !self.navigationController.navigationBarHidden;

if ( !hide)
{
[self.navigationController setNavigationBarHidden: hide animated: NO];
}

[UIView transitionWithView: self.navigationController.view
duration: 1
options: UIViewAnimationOptionTransitionCrossDissolve
animations: ^{

[self.navigationController setNavigationBarHidden: hide animated: NO];
}
completion: nil ];
}

综上所述,我认为您不会因为直接弄乱 UINavigationBar 的隐藏属性或 alpha 属性而惹上任何麻烦(Apple Rejection)。文档警告不要触摸这些,因为它们由 UINavigationController 管理,更改它们可能会产生看不见的后果。但在我看来,它们是公共(public) API,因此使用它们不应成为拒绝的理由。

关于ios - 如何让 "legally"淡出应用程序中的导航栏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17913669/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com