最近在研究一些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之后的圖片
