手上的App有一個(gè)分享到微信再返回時(shí)的閃屏問(wèn)題簿废,起初看到其它的App也有類似的問(wèn)題弥咪,以為是iOS9的Bug,沒(méi)有太在意纠吴。今天別人又跟我說(shuō)起了這個(gè)問(wèn)題硬鞍,多測(cè)試了幾個(gè)App,發(fā)現(xiàn)都挺正常的戴已,頓時(shí)覺(jué)得這肯定不是iOS9的Bug了固该。
閃屏是瞬間的事情,看Console沒(méi)有很特別的日志糖儡,定位起來(lái)一時(shí)毫無(wú)頭緒蹬音,暫時(shí)想到的方法是一步一步排除,大概也是最笨的辦法休玩,很耗時(shí)間著淆。突然想起來(lái)前不久一微信群的群友也問(wèn)了這個(gè)問(wèn)題,不妨先問(wèn)問(wèn)他拴疤,說(shuō)不定先解決了永部。
翻了幾十頁(yè)的聊天記錄,終于找到那個(gè)問(wèn)題呐矾,給對(duì)方留言苔埋。一會(huì)兒,就有好消息傳來(lái)蜒犯,他解決了组橄,真是太好了。然而花了兩周時(shí)間罚随,這真是個(gè)磨人的問(wèn)題玉工。接著是做夢(mèng)都不會(huì)想到,問(wèn)題的原因竟是一行代碼導(dǎo)致的淘菩,這行代碼的作用是隱藏App返回按鈕的文字遵班。
看看這有問(wèn)題的代碼:
//將返回按鈕的文字position設(shè)置不在屏幕上顯示
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(NSIntegerMin, NSIntegerMin)
forBarMetrics:UIBarMetricsDefault];
作用應(yīng)該是對(duì)返回按鈕Title進(jìn)行無(wú)窮大的負(fù)偏移,使返回按鈕Title消失在屏幕顯示區(qū)域的無(wú)窮遠(yuǎn)處。
很不湊巧狭郑,那位群友也是使用這行代碼腹暖。根據(jù)我做的筆記,這段代碼應(yīng)該是來(lái)源于這篇文章:自定義iOS7導(dǎo)航欄背景,標(biāo)題和返回按鈕文字顏色翰萨,都是抄過(guò)來(lái)的肯定沒(méi)錯(cuò)??脏答。
群友給的解決辦法是不用這段代碼,設(shè)置返回按鈕Title為透明顏色亩鬼,很機(jī)智有木有以蕴?
大概就是這樣:
[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor clearColor]}
forState:UIControlStateNormal];
我測(cè)試了一下問(wèn)題就一下子解決了,但是他提醒我原生的UIBarbuttonItem的文字都會(huì)變成透明的辛孵,我繼續(xù)測(cè)試還是沒(méi)有問(wèn)題丛肮,奇怪。
但是那一行代碼是怎么會(huì)導(dǎo)致從其它的App返回時(shí)會(huì)閃屏呢魄缚,不得其解宝与,雖然解決了,給我的感覺(jué)就是頭痛醫(yī)腳有木有冶匹,而且還很管用??习劫。我盯著NSIntegerMin看了一會(huì),突然想會(huì)不會(huì)是這個(gè)值太離譜了嚼隘?我搜了一下诽里,這個(gè)值在64位下的值是-9223372036854775808,非常長(zhǎng)的一串?dāng)?shù)字飞蛹。實(shí)際上最多只需要在一個(gè)屏幕之外隱藏應(yīng)該就夠了不是谤狡?
于是,我把上面有問(wèn)題的代碼換成了下面的:
//將返回按鈕的文字position設(shè)置不在屏幕上顯示
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-kScreenWidth, -kScreenHeight)
forBarMetrics:UIBarMetricsDefault];
其中的kScreenWidth和kScreenHeight分別是屏幕寬度與高度卧檐。再繼續(xù)測(cè)試墓懂,居然也能解決問(wèn)題,這狗屎運(yùn)霉囚。捕仔。。那么問(wèn)題是計(jì)算量太大還是啥的盈罐?不得而知榜跌。