對于iOS開發(fā)者來說撩扒,底部的tabBar通常都是需要自定義,因?yàn)橄到y(tǒng)自帶的或多或少和我們要求的總有一點(diǎn)的出入锋恬。
在自定義tabBar后桶蝎,通常做法就是移除系統(tǒng)的tabBar來防止出現(xiàn)重影的問題。
在iPhoneX之前我們通常都是在導(dǎo)航中使用這樣的方法來移除系統(tǒng)的tabBar的
iPhoneX之前移除系統(tǒng)的tabBar方法或者
視圖即將出現(xiàn)時進(jìn)行刪除
效果呢如何乏奥,自然是不用多少摆舟。因?yàn)檫@是在iPhoneX之前最常用的消除系統(tǒng)系統(tǒng)tabBar的方法。
但是邓了!在iPhoneX之后恨诱,我們在適配的時候,如果還是加上這段代碼的話骗炉,在進(jìn)入初始界面的時候照宝,并沒有發(fā)現(xiàn)什么問題。如圖:
初始進(jìn)入視圖的時候
我們根據(jù)視圖會發(fā)現(xiàn)并沒有什么問題句葵,如果點(diǎn)擊按鈕什么的進(jìn)入下一級界面后厕鹃,再次返回界面就會出現(xiàn)重影問題。如圖:
在進(jìn)入二級界面后再次返回后的視圖
這時候問題出現(xiàn)了乍丈。我們明明在導(dǎo)航中刪除了熊响,為什么會在二級界面返回的時候仍會出現(xiàn)這樣的問題?是這段代碼沒有起作用嗎诗赌?顯然不是的汗茄,因?yàn)槲覀冊诔醮芜M(jìn)入視圖的時候,是沒有出現(xiàn)重影的铭若,但是在返回的時候洪碳,出現(xiàn)了重影递览。
解決方法:
第一種:直接在系統(tǒng)的tabBar中進(jìn)行更改,這種方法是一個朋友介紹的瞳腌,目前還沒有嘗試過绞铃,但是能用。
第二種:在自定義的TabBarController中嫂侍。添加刪除系統(tǒng)tabBar的代碼儿捧。具體如下:
刪除系統(tǒng)的tabBar
這樣就完美解決了iOS 11,在返回時候tabb出現(xiàn)重影的問題挑宠。
原理:在iOS 11中菲盾,系統(tǒng)的控件(似乎是)只能隱藏,不能刪除各淀,再返回的時候懒鉴,系統(tǒng)會自動判斷,添加已刪除的系統(tǒng)控件碎浇。(具體的真實(shí)性有待研究)临谱。
這兩者的代碼區(qū)別是,前者我們只刪除一次奴璃,后者是在前者基礎(chǔ)上再刪除一次悉默,以防出現(xiàn)的時候不能刪除,在viewWillAppear中刪除只是保證刪除一次。所以要進(jìn)行多次刪除苟穆。
這樣多次刪除會不會把本來不存在的刪除會出現(xiàn)空指針訪問錯誤抄课?
不會的。因?yàn)槲覀兪潜闅v他的子控件,發(fā)現(xiàn)有才去刪除,所以并不會刪除不存在的東西鞭缭。
至此,重影問題完美解決魏颓。