手上的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分别是屏幕宽度与高度。再继续测试,居然也能解决问题,这狗屎运。。。那么问题是计算量太大还是啥的?不得而知。