美文网首页iOS bug修复iOS程序犭袁iOS
解决iOS9下隐藏App返回按钮文字导致的诡异闪屏问题

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

作者: 千若逸 | 来源:发表于2016-03-18 18:11 被阅读1804次

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

相关文章

网友评论

  • coder小鹏:我也遇到了这个问题,之前的一个版本有这个问题,第二版的时候没有改代码自己就好了
  • BlueMouse:通过在版本记录里面二分查找定位,花了2个小时找到了问题所在,根据关键字搜到了博主的文章,谢谢博主!
  • 傑_Dream:可以666
  • Miik:感谢博主,哈哈
  • 042a0e1be73f:遇到过,我是直接把返回按钮文字设置成@""
    44832370a1f6:这个方法早就不管用了
  • 我的天空蔚蓝色:我擦,我一直没解决
  • Lonely__M:你一定是上天派来拯救我的:joy:
    Lonely__M:@千飞若逸Fee 两三天了
    千若逸:@Lonely__ 这问题你查了多长时间了?
  • iOS程序犭袁:学习了
  • 操哥: :relaxed: mark

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

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