簡(jiǎn)單修復(fù)iPhone X設(shè)備tabBar高度錯(cuò)亂的問(wèn)題

前言

iPhone X在主界面是UITabBarController的情況下,如果控制器的hidesBottomBarWhenPushed屬性設(shè)為true,進(jìn)行push操作之后會(huì)出現(xiàn)tabBar高度錯(cuò)亂的現(xiàn)象,先變矮一截,然后返回的時(shí)候又彈回到正常高度,非常影響使用感受,這應(yīng)該屬于iOS 11在iPhone X設(shè)備下自身的bug。(iOS 11為了適配全面屏真的搞出很多UI上的bug,惡心)

問(wèn)題復(fù)現(xiàn)

首先,UITabBarController上是一個(gè)UINavigationController

然后在UINavigationController上present一個(gè)UIViewController,dismiss掉

然后創(chuàng)建一個(gè)UIViewController,設(shè)置hidesBottomBarWhenPushed為true,pushViewController

這個(gè)時(shí)候你會(huì)發(fā)現(xiàn)tabBar瞬間變矮了,里面的圖標(biāo)都漏出來(lái)了,非常不美觀

然后返回,你會(huì)發(fā)現(xiàn)tabBar又彈回正常高度了,這不膈應(yīng)人嗎

解決思路

既然我們知道了是tabBar的高度變化引起的,那么我們就對(duì)tabBar的高度下手,網(wǎng)上看到一些自定義UITabBar的方法,很不錯(cuò),但是稍微麻煩了點(diǎn),我的方法是用KVO監(jiān)聽(tīng)tabBar的frame,當(dāng)frame改變時(shí),我們?nèi)∫粋€(gè)高度最大的值重新布局tabBar就行了,沒(méi)有特殊定制情況下這種方式完全可以解決問(wèn)題了

代碼

class MyTabBarController: UITabBarController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        tabBar.addObserver(self, forKeyPath: "frame", options: [.old, .new], context: nil)
    }
    
    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if let tabBar = object as? UITabBar, keyPath == "frame" {
            if let oldFrame = change?[.oldKey] as? CGRect, let newFrame = change?[.newKey] as? CGRect {
                if oldFrame.size != newFrame.size {
                    if oldFrame.height > newFrame.height {
                        tabBar.frame = oldFrame
                    } else {
                        tabBar.frame = newFrame
                    }
                }
            }
        }
    }
    
    deinit {
        tabBar.removeObserver(self, forKeyPath: "frame")
    }
    
}

用OC的小伙伴自己改成OC代碼就行了,iPhone X的tabBar的高度為什么會(huì)在49和83之間來(lái)回跳,懵逼臉

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,161評(píng)論 4 61
  • 這是于淑靜老師爸爸的類風(fēng)濕,經(jīng)過(guò)淑靜老師給做半個(gè)月的治療,手指完全能自主伸開(kāi)了,解決了爸爸類風(fēng)濕手疼的痛苦,這是做...
    一德火療養(yǎng)生館黃會(huì)娥閱讀 153評(píng)論 0 1
  • 理財(cái)就是理生活—去銀行柜臺(tái)辦業(yè)務(wù)的時(shí)候就經(jīng)常會(huì)看到這句話,每次看到這句話我就會(huì)感嘆廣告人的博大智慧,他們總能把自...
    d1def2570a94閱讀 408評(píng)論 2 3
  • 8月31號(hào)的早上, 比往常精神抖擻 匆匆吃了早餐, 驅(qū)車(chē)來(lái)到學(xué)校門(mén)口 背著他的小書(shū)包, 穿著全新的園服 我問(wèn)他想不...
    大力穩(wěn)重閱讀 715評(píng)論 11 32
  • 脫去現(xiàn)實(shí)的偽裝,戴上耳機(jī)閉上眼睛,想象著在林間小道,一路狂奔,滿眼的綠色,自然地旋轉(zhuǎn)跳躍。 Just U-vass...
    1個(gè)湯圓閱讀 294評(píng)論 0 1

友情鏈接更多精彩內(nèi)容