自定義tabbar高度的跳轉隱藏問題 === 問題並不是很複雜,只是需求特殊,在網上沒有找到類似的demo,網上也有很多blog或者技術文章都有自己的見解,還沒有找到能完的解決我的需求的方法,這個問題從年前一直想到年後,想了大概一禮拜吧。。。終於解決!!! 在網上也找到很多大神的博客,辯論自定義ta
自定義tabbar高度的跳轉隱藏問題
問題並不是很複雜,只是需求特殊,在網上沒有找到類似的demo,網上也有很多blog或者技術文章都有自己的見解,還沒有找到能完的解決我的需求的方法...
在網上也找到很多大神的博客,辯論自定義tabbar應該採用哪種方式取代系統自帶的tabbar,還有隱藏自定義tabbar的一些思路和方法,不一一介紹了,下麵給大家一些好文章的鏈接做參考。
stackoverflow上的一個問答: http://stackoverflow.com/questions/23044218/change-uitabbar-height
修改tabbar高度的文章:http://blog.sina.com.cn/s/blog_3ebf0600010174s8.html
下麵都是關於隱藏自定義tabbar的文章或則帖子,有的帖子還具有爭論性,或則還沒有解決。。。
一個討論隱藏tabbar的帖子:http://www.cocoachina.com/bbs/read.php?tid=255388
一篇帖子:http://www.cocoachina.com/bbs/read.php?tid=81065
一篇關於隱藏tabbar的博客:http://blog.csdn.net/ralbatr/article/details/38388509
一篇博客http://my.oschina.net/u/2461772/blog/508254?p=1
一篇博客:http://blog.csdn.net/a6472953/article/details/8363076
筆者做過多次測試,其中遇到的各種困難或則小問題不在這裡細說,比如和系統自帶的tabbar高度不一樣導致的有一條線的問題,還有push時動畫效果等等一些列問題不在這裡累述了,當然,思路有很多,可以參考以上鏈接自己琢磨琢磨,好了,下麵直接上個人認為完美解決辦法。
需求
1、自定義tabbar,不用系統的tabbar
2、第二點需求是自定義tabbar的高度和系統的不一樣,系統的tabbar高度為49,就是因為這點導致第三個需求有多重解決方法。
3、跳轉隱藏tabbar,這個需求很簡單,但是在第二個需求的前提下第三個需求並不是這麼容易實現了。
完美解決辦法(只寫關鍵代碼)
自定義tabbar
// 創建一個自定義的tabbar,並且設置frame(frame寫死了,讀者可以根據自己的需求改,筆者用的自定義高為44)
ERTabBar *tabBar = [[ERTabBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
設置系統tabbar的高度(其他博客或者論壇也有這樣解決的)
CGRect frame = [UIScreen mainScreen].bounds;
self.tabBar.frame = CGRectMake(0, CGRectGetHeight(frame)-44, CGRectGetWidth(frame), 44);
UIView *transitionView = [[self.view subviews] objectAtIndex:0];
frame.size.height = CGRectGetHeight(frame) - 44;
transitionView.frame = frame;
把自定的tabbar添加到系統自帶的tabbar上面(tip:千萬別用[self.tabBar removeFromSuperview],這樣使用後面很難操作!!!)
[self.tabBar addSubview:tabBar];
在viewWillAppear方法中刪除系統自帶的tabBarButton
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// 刪除系統自帶的tabBarButton
for (UIView *tabBarButton in self.tabBar.subviews) {
if ([tabBarButton isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
[tabBarButton removeFromSuperview];
}
}
}
跳轉隱藏
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (self.childViewControllers.count) { // 不是根控制器
viewController.hidesBottomBarWhenPushed = YES;
[super pushViewController:viewController animated:animated];
}
**轉載請註明來自吃飯睡覺擼碼的博客 http://www.cnblogs.com/Erma-king/,並包含相關鏈接。**