不仅仅重叠了,而且还把图标给覆盖了。很郁闷。
折腾了很久,终于找到解决办法了。
解决方法一:
在自定也的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中发出通知:
- [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
- {
- // 删除系统自带的tabBarButton
- for (UIView *tabBar in self.tabBarController.tabBar.subviews) {
- if ([tabBar isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
- [tabBar removeFromSuperview];
- }
- }
- }
-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
for (UIView *child in self.tabBar.subviews) {
if ([child isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
[child removeFromSuperview];
}
}
}
最后运行:完美 !