UITabBarController的view由两部分组成tabbar和transitionView,tabbar的高度默认49,网上搜索有很多改变高度的方法,但是在使用后都会出现白条等不合适的地方,经过不断试验,得出一套目前正确的解决方案,第一,tabbar的frame设置需要在viewDidLayoutSubviews中进行,如果是自定义的tabbar,也是如此,因为viewDidLayoutSubviews在viewDidLoad后执行,所以在viewDidLoad中设置的不执行或者出现错误。第二,viewDidLayoutSubviews在他的子view布局时都会调用,所以要保证自定义的代码执行一次,如果frame设置时给的准确数字,执行两遍倒是不会影响结果,但是,如果含有算式,执行两遍,结果就错了。
创建一个继承UITabBarController的ViewController类
@interface MainViewController : UITabBarController
@end
在此类中有一个viewDidLayoutSubviews的方法,此方法在每个UITabBarController的每个子View布局时都会调用
- (void)viewDidLayoutSubviews{
// NSLog(@"%s",__func__);
//此方法在创建每个子View时都会调用,此类中调用两次,下方代码只需要一次
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
CGRect frame = CGRectMake(0
, self.tabBar.frame.origin.y-41
, self.tabBar.frame.size.width
, 90);
self.tabBar.frame = frame;
NSLog(@"%lf, %lf, %lf, %lf,", self.tabBar.frame.origin.x, self.tabBar.frame.origin.y, self.tabBar.frame.size.width, self.tabBar.frame.size.height);
// self.tabBar.backgroundColor = [UIColor redColor];
WDYTabbar *wDYTabbar = [[WDYTabbar alloc] initWithFrame:self.tabBar.bounds];
//添加五个按钮
[wDYTabbar addTabbarBtnWithNormalImg:@"lights0" selImg:@"lights1"];
[wDYTabbar addTabbarBtnWithNormalImg:@"aircon0" selImg:@"aircon1"];
[wDYTabbar addTabbarBtnWithNormalImg:@"service0" selImg:@"service1"];
[wDYTabbar addTabbarBtnWithNormalImg:@"setting0" selImg:@"setting1"];
//设置代理
wDYTabbar.delegate = self;
//把自定义的tabbar添加到 系统的tabbar上
[self.tabBar addSubview:wDYTabbar];
});
}
自定义TabBar请参考自定义UITabBarController的TabBar
如有不懂的可以留言&私信