解决iOS9下隐藏App返回按钮文字导致的诡异闪屏问题

手上的App有一个分享到微信再返回时的闪屏问题,起初看到其它的App也有类似的问题,以为是iOS9的Bug,没有太在意。今天别人又跟我说起了这个问题,多测试了几个App,发现都挺正常的,顿时觉得这肯定不是iOS9的Bug了。

闪屏是瞬间的事情,看Console没有很特别的日志,定位起来一时毫无头绪,暂时想到的方法是一步一步排除,大概也是最笨的办法,很耗时间。突然想起来前不久一微信群的群友也问了这个问题,不妨先问问他,说不定先解决了。

翻了几十页的聊天记录,终于找到那个问题,给对方留言。一会儿,就有好消息传来,他解决了,真是太好了。然而花了两周时间,这真是个磨人的问题。接着是做梦都不会想到,问题的原因竟是一行代码导致的,这行代码的作用是隐藏App返回按钮的文字。

看看这有问题的代码:

//将返回按钮的文字position设置不在屏幕上显示
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(NSIntegerMin, NSIntegerMin) 
                              forBarMetrics:UIBarMetricsDefault];

作用应该是对返回按钮Title进行无穷大的负偏移,使返回按钮Title消失在屏幕显示区域的无穷远处。
很不凑巧,那位群友也是使用这行代码。根据我做的笔记,这段代码应该是来源于这篇文章:自定义iOS7导航栏背景,标题和返回按钮文字颜色,都是抄过来的肯定没错。

群友给的解决办法是不用这段代码,设置返回按钮Title为透明颜色,很机智有木有?
大概就是这样:

[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor clearColor]} 
                              forState:UIControlStateNormal];

我测试了一下问题就一下子解决了,但是他提醒我原生的UIBarbuttonItem的文字都会变成透明的,我继续测试还是没有问题,奇怪。

但是那一行代码是怎么会导致从其它的App返回时会闪屏呢,不得其解,虽然解决了,给我的感觉就是头痛医脚有木有,而且还很管用。我盯着NSIntegerMin看了一会,突然想会不会是这个值太离谱了?我搜了一下,这个值在64位下的值是-9223372036854775808,非常长的一串数字。实际上最多只需要在一个屏幕之外隐藏应该就够了不是?

于是,我把上面有问题的代码换成了下面的:

//将返回按钮的文字position设置不在屏幕上显示
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-kScreenWidth, -kScreenHeight) 
                              forBarMetrics:UIBarMetricsDefault];

其中的kScreenWidth和kScreenHeight分别是屏幕宽度与高度。再继续测试,居然也能解决问题,这狗屎运。。。那么问题是计算量太大还是啥的?不得而知。

你可能感兴趣的:(解决iOS9下隐藏App返回按钮文字导致的诡异闪屏问题)