大家在自定義tabbar的時候會將系統的tabbar干掉,然后放上自已自定義的tabbar(含有想要的Button)對不對,具體代碼如下:
/** * 添加自定義的tabBar */ -(void)addTabBarView { MSTabBar * tabbar = [[MSTabBar alloc]init]; tabbar.backgroundColor = [UIColor whiteColor]; tabbar.frame = self.tabBar.bounds; tabbar.delegate = self; tabbar.tabBarItems = self.tabBarItems; [self.tabBar addSubview:tabbar]; } /** * 在主要控制器出來時將系統的tabbar移除掉只剩下自已的 */ -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; //將tabbar里面的東西除了自定義的tabbar不刪除,其他都刪除 //留下一個自定義的.想隱藏就能隱藏掉,只要設置tabbar的一個隱藏屬性就好, for (UIView * view in self.tabBar.subviews) { if (![view isKindOfClass:[MSTabBar class]]) { [view removeFromSuperview]; } } }
然后完美使用自已自定義的,就可以隨心所欲在view上做事情,或者做一些想要的動畫
但是
最近項目出現tabbar重影問題,我明明將系統的tabbar干掉了,但是還是感覺會出來,在我使用以下代碼進行頁面間的跳轉的時候,重影問題出現了.
重影圖片居然長那么丑,就是系統的藍色加上自已的色彩,完全懵逼了有木有!!!
我設置的顏色是00d4d3 而重疊上系統的藍色
拿層級工具查看
有沒有覺得跟蛋疼,,,疼疼疼....
這讓我很尷尬啊,為什么去掉了系統的tabbar又出現了
細心點會發現只是進行跨級跳躍的時候會出現該bug,只是我是這樣出現的,不知道還有其他同學會怎么奇葩地出現改bug
嚴肅來說如果只是單個跳轉並沒有出現重影,而進行跨級跳躍的時候會出現tabbar圖標重影問題.
以下代碼為跨級跳轉
//發通知 for (UIViewController *controller in self.navigationController.viewControllers) { if ([controller isKindOfClass:[MSDetailWebController class]]) { [self.navigationController popToViewController:controller animated:NO]; } }
在百度尋找了一堆答案,試了無限次遍,終於在一個方法里面實現幾行代碼就解決了,重影問題沒有再出現過
請同學們仔細觀察以下~~!!!--------跨級跳轉的時候會發現什么~!!
具體原理不貼了,畢竟我們是解決問題的嘛~~(其實我也不知道發現啥,反正系統的tabbar會再出現一次)
解決辦法:
-(void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; for (UIView * view in self.tabBar.subviews) { if (![view isKindOfClass:[MSTabBar class]]) { [view removeFromSuperview]; } } }
在主要的視圖layoutSubView中再刪除一次,以防出現的時候不能刪除,在viewWillAppear中刪除只是保證刪除一次
所以要進行多次刪除
有同學會發現這樣刪除會不會把本來不存在的刪除會出現空指針訪問錯誤
這樣是不會出現這種問題的,因為是遍歷他的子控件,發現有才刪除,所以並不會刪除不存在的東西
這樣就完美解決了問題,不會再重影問題,盡管你再怎么跳~~~來呀跳啊啊啊~~