ios – 如何“合法地”淡出应用中的导航栏?

前端之家收集整理的这篇文章主要介绍了ios – 如何“合法地”淡出应用中的导航栏?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
看起来删除导航栏的唯一方法是通过向上滑动.我想要它淡出,就像在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执行导航栏的隐藏状态和非隐藏状态之间的交叉淡入淡出,由公共API setNavigationBarHidden:animated:设置.事实上,这有助于“退出”导航栏,但如果出现问题,则会退缩.问题是导航栏将滑动到位,无论UIView transitionWithView:不能动画化动画属性(例如框架),除非您指定UIViewAnimationOptionAllowAnimatedContent.

对我来说,这说明内部的UINavigationController将UINavigationBar重新定位在一个动画块内,无论是否在调用setNavigationBarHidden:animated:中指定了动画.当动画:设置为NO时,此动画块的持续时间可能设置为“0”.

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

我的示例项目是标准的单一视图应用程序.在故事板上是一个UINavigationController,它是入口点.我将这个控制器的UINavigationBar的条形设置为黑色半透明(类似于照片应用程序).导航控制器的rootViewController是一个简单的UIViewController,UIImageView填充了整个界限(也就像Photos应用程序).我在视图中添加了一个UITapGestureRecognizer,以在视图控制器中调用以下代码

- (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属性.文档警告不要触摸这些文件,因为它们由UINavigationController管理并改变它们可能没有看到后果.但在我的意见中,他们是公开的API,因此使用它们不应该被拒绝.

原文链接:https://www.f2er.com/iOS/337328.html

猜你在找的iOS相关文章