解決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分別是屏幕寬度與高度。再繼續測試,居然也能解決問題,這狗屎運。。。那么問題是計算量太大還是啥的?不得而知。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,466評論 25 708
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,251評論 4 61
  • 前段時間因為公司添加了支付業務,于是集成了支付寶和內購。悲劇的是,??,因為寶寶被拒了。拿句應景的話說,寶寶生氣了,...
    迷了jiang閱讀 925評論 0 1
  • 2016年的最后一天,整個朋友圈都充滿了跨年計劃,而我選擇了它,因為它比外面的妖嬈艷貨更吸引我?(?^o^?)?。...
    power云閱讀 250評論 0 0
  • 在周星馳的電影中,一只名叫“小強”的蟑螂紅了,于是所有蟑螂,都成了小強。 一只名叫旺財的狗紅了,于是走出去,喊一聲...
    茄子懸賞閱讀 415評論 0 1