完美解決iPhoneX, iphoneX Max自定義tabBar造成的重影問題

在iOS開發(fā)中,底部的tabBar通常都是需要自定義,因?yàn)橄到y(tǒng)自帶的或多或少和我們要求的總有一點(diǎn)的出入。
在自定義tabBar后,通常做法就是移除系統(tǒng)的tabBar來防止出現(xiàn)重影的問題。
在iPhoneX之前我們通常都是在導(dǎo)航中使用這樣的方法來移除系統(tǒng)的tabBar的。
方法一:在自定義的UINavigationController中的下面方法中這樣寫:


圖1.png
- (void)navigationController:(UINavigationController*)navigationController willShowViewController:(UIViewController*)viewController animated:(BOOL)animated{   
 // 刪除系統(tǒng)自帶的tabBarButton   
 for (UIView *tabBar in self.tabBarController.tabBar.subviews) {       
         if ([tabBar isKindOfClass:NSClassFromString(@"UITabBarButton")]) {           
                [tabBarremoveFromSuperview];       
         }
     }
 }

方法二:或者在自定義的TabBarController中的下面方法中這樣寫:

圖2.png

視圖即將出現(xiàn)時進(jìn)行刪除。
效果自然能夠?qū)崿F(xiàn)。因?yàn)檫@是在iphoneX,iphoneX Max之前最常用的消除系統(tǒng)系統(tǒng)tabBar的方法。
但是!在iphoneX,iphoneX Max之后,我們在適配的時候,如果還是只加上這些代碼的話,在進(jìn)入初始界面的時候,并沒有發(fā)現(xiàn)什么問題(正常)。如圖3:

圖3
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    for (UIView *tabBar in self.tabBarController.tabBar.subviews) {
        if([tabBar isKindOfClass:NSClassFromString(@"UITabBarButton")]){
            [tabBar removeFromSuperview];
        }
    }
}

但當(dāng)進(jìn)入二級頁面再返回后就會發(fā)現(xiàn)變成如下圖4所示樣式了:

圖4

解決方法:

在自定義的TabBarController中。添加刪除系統(tǒng)tabBar的代碼。具體如下 圖5:


圖5
// 解決iphoneX在返回時候tabb出現(xiàn)重影的問題
- (void)viewWillLayoutSubviews{   
    [super viewWillLayoutSubviews];   
    for (UIView *view in self.tabBar.subviews) {       
        if(![viewisKindOfClass:[MainTabBarclass]]) {           
            [viewremoveFromSuperview];       
        }   
    }
}

這樣就完美解決了iphoneX,iphoneX Max上,在返回時候tabb出現(xiàn)重影的問題。
大概原理:在iphoneX,iphoneX Max中,系統(tǒng)的控件(似乎是)只能隱藏,不能刪除,再返回的時候,系統(tǒng)會自動判斷,添加已刪除的系統(tǒng)控件。(具體的真實(shí)性有待研究)。
這兩者的代碼區(qū)別是,前者我們只刪除一次,后者是在前者基礎(chǔ)上再刪除一次,以防出現(xiàn)的時候不能刪除,在viewWillAppear中刪除只是保證刪除一次。所以要進(jìn)行多次刪除。
這樣多次刪除會不會把本來不存在的刪除會出現(xiàn)空指針訪問錯誤?
不會的。因?yàn)槲覀兪潜闅v他的子控件時是發(fā)現(xiàn)有才去刪除,所以并不會刪除不存在的東西。
到此,iPhoneX自定義tabBar造成的重影問題完美解決。

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

推薦閱讀更多精彩內(nèi)容

  • 對于iOS開發(fā)者來說,底部的tabBar通常都是需要自定義,因?yàn)橄到y(tǒng)自帶的或多或少和我們要求的總有一點(diǎn)的出入。 在...
    會飛的海豚哦閱讀 3,035評論 0 1
  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AGI閱讀 16,003評論 3 119
  • 凌晨,一個人,伴著黑夜走在回宿舍的路上,我抬起頭看看天上的月亮,那么清明淡雅,聽聽周遭安靜的蟲鳴,想著自己剛在簡書...
    困境療愈師芳芳閱讀 539評論 9 16
  • 特邀: 心理咨詢師的培訓(xùn)和督導(dǎo) 資深導(dǎo)師郭聰榮老師親自授課 主辦方: 北京馨之雨文化公司 沙盤游戲心理治療 ...
    宋志蘭閱讀 1,703評論 2 2