自定義UITabBarController以及UITabBar的分析


最近在研究一些iOS中的基本問題,發現網上的答案很多,但是講的都不夠清晰,自己結合使用的實際情況總結下。

很多時候我們需要自定義UITabBarController或者UITabBar,但是往往用起來有些地方讓人困惑。

1、先說下網絡上常見的方式:隱藏原有的TabBar,使用UIView完全重新定義TabBar,這樣的好處就是,定制化的程度很高

而且很多東西可以完全推倒重來,但是有一個很嚴重的問題,當使用

viewController.hidesBottomBarWhenPushed = YES的時候,還是無法隱藏UITabBar,這個始終無法隱藏,除非采用自定制的動畫移開這個UIView或者設置

這個為Hidden, 最重要的問題也在這里, 所以采用隱藏原有的TabBar的方式之后很多人抱怨無法通過viewController.hidesBottomBarWhenPushed = YES

來隱藏TabBar,網上有很多類似的代碼,我這里就不貼源代碼了,問題已經分析出來了。

網易新聞的iOS客戶端就是這樣的方式實現的,有一點點小的瑕疵

還有一種類型的TabBar可以使用這樣的方式來實現,上截圖

這個就完全是重寫了TabBar,而且和以前的系統原生的沒有任何關系了,但是用的不多。

 

 

2、使用自定義UITabBarController, 繼承UITabBarController,采用兩種方式(為了適應iOS4 和 iOS5)

主要代碼如下

//方法一

        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tabbar_background"]];

        imageView.frame = CGRectMake(0, 0, self.tabBar.frame.size.width, self.tabBar.frame.size.height);

        NSLog(@"the frame is %f---%f", self.tabBar.frame.size.width, self.tabBar.frame.size.height);

        imageView.contentMode = UIViewContentModeScaleToFill;

        [[self tabBar] insertSubview:imageView atIndex:0];

        [imageView release];

        

        //方法二  適用於iOS5+

//        [self.tabBar setBackgroundImage:[UIImage imageNamed:@"tabbar_background"]];

方法一只能適用於iOS5以下的系統,在iOS5+上面無法使用,所以必須把這兩種方法結合起來

當使用viewController.hidesBottomBarWhenPushed = YES

然后再加上

[self.navigationControllerpushViewController:ucenter animated:YES];

就可以實現UITabBar的隱藏,同時也實現了自定義的UITabBarController

截圖如下,新浪微博的客戶端就是采用這樣的方式實現的。

push之后的圖片

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM