UITabBarController的view由兩部分組成tabbar和transitionView棘脐,tabbar的高度默認(rèn)49,網(wǎng)上搜索有很多改變高度的方法龙致,但是在使用后都會(huì)出現(xiàn)白條等不合適的地方蛀缝,經(jīng)過不斷試驗(yàn),得出一套目前正確的解決方案目代,第一屈梁,tabbar的frame設(shè)置需要在viewDidLayoutSubviews中進(jìn)行,如果是自定義的tabbar榛了,也是如此在讶,因?yàn)関iewDidLayoutSubviews在viewDidLoad后執(zhí)行,所以在viewDidLoad中設(shè)置的不執(zhí)行或者出現(xiàn)錯(cuò)誤霜大。第二构哺,viewDidLayoutSubviews在他的子view布局時(shí)都會(huì)調(diào)用,所以要保證自定義的代碼執(zhí)行一次战坤,如果frame設(shè)置時(shí)給的準(zhǔn)確數(shù)字遮婶,執(zhí)行兩遍倒是不會(huì)影響結(jié)果,但是湖笨,如果含有算式,執(zhí)行兩遍蹦骑,結(jié)果就錯(cuò)了慈省。
創(chuàng)建一個(gè)繼承UITabBarController的ViewController類
@interface MainViewController : UITabBarController
@end
在此類中有一個(gè)viewDidLayoutSubviews的方法,此方法在每個(gè)UITabBarController的每個(gè)子View布局時(shí)都會(huì)調(diào)用
- (void)viewDidLayoutSubviews{
//? ? NSLog(@"%s",__func__);
//此方法在創(chuàng)建每個(gè)子View時(shí)都會(huì)調(diào)用,此類中調(diào)用兩次边败,下方代碼只需要一次
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];
//添加五個(gè)按鈕
[wDYTabbar addTabbarBtnWithNormalImg:@"lights0" selImg:@"lights1"];
[wDYTabbar addTabbarBtnWithNormalImg:@"aircon0" selImg:@"aircon1"];
[wDYTabbar addTabbarBtnWithNormalImg:@"service0" selImg:@"service1"];
[wDYTabbar addTabbarBtnWithNormalImg:@"setting0" selImg:@"setting1"];
//設(shè)置代理
wDYTabbar.delegate = self;
//把自定義的tabbar添加到 系統(tǒng)的tabbar上
[self.tabBar addSubview:wDYTabbar];
});
}
自定義TabBar請(qǐng)參考自定義UITabBarController的TabBar
如有不懂的可以留言&私信