美文网首页
NavigationBar 的 奇幻 BUG 之旅

NavigationBar 的 奇幻 BUG 之旅

作者: Zaki丶 | 来源:发表于2017-04-19 17:56 被阅读25次

    前两天, 在把玩自家 App 应用的时候,发现了导航栏的一些过渡动画小瑕疵,虽然不影响大局使用,但对于我这种 ‘伪强迫症患者’ 简直就是不能忍受,经过两天的闲暇时间加班研究,终于使导航栏的动画效果变得舒服完美,心里顿时就美滋滋啦,避免小伙伴们跟我一样走入误区, 就写篇文章大家一起讨论讨论~

    NavigationBar 怎么使用的我就不说了,很简单而且Google 中有大把教程,我主要就说下我遇到的几个问题,闲话少说了,我就直接上图


    第一个问题.gif

    第一个问题很简单,只不过是设置 navgationBar 的隐藏属性时没有设置 动画效果, 修改成 true 即可

    navigationController?.navigationBar.isHidden = true
    navigationController?.isNavigationBarHidden = true
    navigationController?.setNavigationBarHidden(true, animated:  false)
    不管用上面三种哪个方法都修改为 : 
    navigationController?.setNavigationBarHidden(true, animated:  animated)
    
    第二个问题.gif

    第一个问题解决了, 第二个问题就有点难了, 在项目中右划返回到一半时迅速撤回会使 navgationBar 丢失,但是缓慢撤回并不会影响到 NavgationBar. 这个问题困扰了我挺长时间的,因为并不知道是哪里出了问题, 只能使用排除法.

    首先呢我想到了是不是因为基类的缘故,在项目中我是利用判断来进行 bar 的隐藏的,会不会是因为先前的动画效果没有执行完毕,撤回的太快就没有执行显示的方法,所以我就先将两个页面拆解出来,然而发现并没有卵用.所以那就不是这方面的问题了,

    然后,我猜想是不是执行代码的逻辑顺序有问题,我就调整了一下代码的执行顺序,发现也并没有什么卵用..我就懵逼了,真的是没法想出来了,各种求救也是无果.

    真是车到山前必有路,在一个偶然的情况下, 我删除了执行 状态栏样式的方法

    override var preferredStatusBarStyle: UIStatusBarStyle {
            return UIStatusBarStyle.lightContent
        }
    

    竟然神奇一般的好了, 不管怎么样毕竟问题已经找到了, 那就开始着手解决吧,这个方法使用不通,那我们使用属性修改吧, 但是修改属性也不行,因为 StatusBarStyle 的属性是 get-only 的, 只能读取,没有修改的权限.

    既然修改不了当前页面的 StatusBar 那就只能修改系统的 StatusBar 了, 在有关页面的 viewWillAppear 方法中都写上修改方法

    UIApplication.shared.statusBarStyle = .default
    

    对了,利用这个属性设置的 StatusBarStyle 的话, 需要在info.plist文件中添加一个属性行,选中表空白地方,右键选中Add Row, 然后在列表中选中最后一个选项,也就是View controller-based status bar appearance,设置为No(不支持在文件中设置状态栏样式),然后在AppDelegate中写上UIApplication.shared.statusBarStyle = .LightContent,这样的话,全局的状态栏样式就OK了。其他的界面如果想要改变样式的话,直接用
    UIApplication.shared.statusBarStyle = .default 修改就可以了。

    虽然这个方法使用起来是可以解决问题的,但是这个问题为什么出现我暂时还没想通,如果有哪位好汉知道该问题的原理,不要吝啬~敬请赐教哈!

    相关文章

      网友评论

          本文标题:NavigationBar 的 奇幻 BUG 之旅

          本文链接:https://www.haomeiwen.com/subject/umjhzttx.html