注: ?本文轉(zhuǎn)自http://blog.csdn.net/bug_delete/article/details/78203996 僅供學(xué)習(xí)參考使用
大家在自定義tabbar的時(shí)候會(huì)將系統(tǒng)的tabbar干掉,然后放上自已自定義的tabbar(含有想要的Button)對(duì)不對(duì),具體代碼如下:
/**
*? 添加自定義的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];
}/**
*? 在主要控制器出來時(shí)將系統(tǒng)的tabbar移除掉只剩下自已的*/-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];//將tabbar里面的東西除了自定義的tabbar不刪除,其他都刪除//留下一個(gè)自定義的.想隱藏就能隱藏掉,只要設(shè)置tabbar的一個(gè)隱藏屬性就好,for(UIView * viewinself.tabBar.subviews)
{if(![view isKindOfClass:[MSTabBarclass]]) {
[view removeFromSuperview];
}
}
}
然后完美使用自已自定義的,就可以隨心所欲在view上做事情,或者做一些想要的動(dòng)畫
但是
最近項(xiàng)目出現(xiàn)tabbar重影問題,我明明將系統(tǒng)的tabbar干掉了,但是還是感覺會(huì)出來,在我使用以下代碼進(jìn)行頁面間的跳轉(zhuǎn)的時(shí)候,重影問題出現(xiàn)了.
重影圖片居然長那么丑,就是系統(tǒng)的藍(lán)色加上自已的色彩,完全懵逼了有木有!!!
我設(shè)置的顏色是00d4d3 而重疊上系統(tǒng)的藍(lán)色
拿層級(jí)工具查看
有沒有覺得跟蛋疼,,,疼疼疼....
這讓我很尷尬啊,為什么去掉了系統(tǒng)的tabbar又出現(xiàn)了
細(xì)心點(diǎn)會(huì)發(fā)現(xiàn)只是進(jìn)行跨級(jí)跳躍的時(shí)候會(huì)出現(xiàn)該bug,只是我是這樣出現(xiàn)的,不知道還有其他同學(xué)會(huì)怎么奇葩地出現(xiàn)改bug
嚴(yán)肅來說如果只是單個(gè)跳轉(zhuǎn)并沒有出現(xiàn)重影,而進(jìn)行跨級(jí)跳躍的時(shí)候會(huì)出現(xiàn)tabbar圖標(biāo)重影問題.
以下代碼為跨級(jí)跳轉(zhuǎn)
//發(fā)通知for(UIViewController *controllerinself.navigationController.viewControllers) {if([controller isKindOfClass:[MSDetailWebControllerclass]]) {
[self.navigationController popToViewController:controller animated:NO];
}
}
在百度尋找了一堆答案,試了無限次遍,終于在一個(gè)方法里面實(shí)現(xiàn)幾行代碼就解決了,重影問題沒有再出現(xiàn)過
請(qǐng)同學(xué)們仔細(xì)觀察以下~~!!!--------跨級(jí)跳轉(zhuǎn)的時(shí)候會(huì)發(fā)現(xiàn)什么~!!
具體原理不貼了,畢竟我們是解決問題的嘛~~(其實(shí)我也不知道發(fā)現(xiàn)啥,反正系統(tǒng)的tabbar會(huì)再出現(xiàn)一次)
解決辦法:
-(void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];for(UIView * viewinself.tabBar.subviews)
{if(![view isKindOfClass:[MSTabBarclass]]) {
[view removeFromSuperview];
}
}
}
在主要的視圖layoutSubView中再刪除一次,以防出現(xiàn)的時(shí)候不能刪除,在viewWillAppear中刪除只是保證刪除一次
所以要進(jìn)行多次刪除
有同學(xué)會(huì)發(fā)現(xiàn)這樣刪除會(huì)不會(huì)把本來不存在的刪除會(huì)出現(xiàn)空指針訪問錯(cuò)誤
這樣是不會(huì)出現(xiàn)這種問題的,因?yàn)槭潜闅v他的子控件,發(fā)現(xiàn)有才刪除,所以并不會(huì)刪除不存在的東西