先看下現象吧陆错,如下圖:
不僅僅重疊了,而且還把圖標給覆蓋了金赦。很郁悶音瓷。對于開發(fā)經驗不是非常豐富的我,
真是折騰了很久夹抗,終于找到解決辦法了绳慎。
解決方法一:
在自定也的NavigationController中添加如下代碼:
- (void)viewDidLoad{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeTabBarBtn) name:@"removeTabBarBtn" object:nil];
}
- (void)removeTabBarBtn
{
// NSArray *tSubviews = self.tabBarController.tabBar.subviews;
// for (int i = 0; i < tSubviews.count; i++) {
// Class parentVCClass = [tSubviews[i] class];
// NSString *className = NSStringFromClass(parentVCClass);
// ALog(@"%d---%@",i, className);
//
// }
for (UIView *tabBar in self.tabBarController.tabBar.subviews) {
if ([tabBar isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
[tabBar removeFromSuperview];
}
}
}
-(void)dealloc
{
[[NSNotificationCenter defaultCenter]removeObserver:self name:@"removeTabBarBtn" object:nil];
}
并且在調用popToRootViewControllerAnimated方法的viewController中發(fā)出通知:
[self.navigationController popToRootViewControllerAnimated:NO];
[[NSNotificationCenter defaultCenter] postNotificationName:@"removeTabBarBtn" object:nil userInfo:nil];
解決方法二:
(該方法更為簡單)蘋果強大就強大在這里,他們已經預想到了。
所以方法就是:遵循UINavigationController的代理杏愤,用代理方法解決該Bug靡砌,代碼如下:
設置代理:
- (void)viewDidLoad{
[super viewDidLoad];
self.delegate = self;
}
實現代理方法:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
// 刪除系統(tǒng)自帶的tabBarButton
for (UIView *tabBar in self.tabBarController.tabBar.subviews) {
if ([tabBar isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
[tabBar removeFromSuperview];
}
}
}
最后運行,完美解決声邦。