在更多选项卡上时,iOS 7 选项卡栏图标暂时消失

Posted

技术标签:

【中文标题】在更多选项卡上时,iOS 7 选项卡栏图标暂时消失【英文标题】:iOS 7 Tab bar icons temporarily disappear when on More tab 【发布时间】:2014-04-25 16:20:49 【问题描述】:

当我将导航控制器嵌入的视图控制器添加到选项卡栏时,返回“更多”选项卡时,其图标 + 标题会短暂消失。

但是,当视图控制器这样添加时,图标+图像是可以的,不会消失。

我已经尝试了很多东西,但没有选择。有什么想法吗?

这是我的AppDelegate 代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.tabBarController = [[UITabBarController alloc] init];

    // Must be placed here, just before tabs are added.  Otherwise navigation bar
    // will overlap with status bar.
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];

    [self addViewControllersToTabBar];
    self.window.rootViewController = self.tabBarController;
    self.window.backgroundColor    = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

    return YES;


- (void)addViewControllersToTabBar

    NSArray* tabBarClassNames =
    @[
      NSStringFromClass([FirstViewController  class]),
      NSStringFromClass([SecondViewController class]),
      NSStringFromClass([FirstViewController  class]),
      NSStringFromClass([FirstViewController  class]),
      NSStringFromClass([FirstViewController  class]),
      NSStringFromClass([SecondViewController class]),
      NSStringFromClass([FirstViewController  class]),
      ];

    NSMutableArray* viewControllers = [NSMutableArray array];
    for (NSString* className in tabBarClassNames)
    
        UIViewController*       viewController = [[NSClassFromString(className) alloc] init];
        UINavigationController* navigationController;

        navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

        [viewControllers addObject:navigationController];
    

    [viewControllers addObject:[[FirstViewController alloc] init]]; // This one is fine.

    self.tabBarController.viewControllers        = viewControllers;
    self.tabBarController.selectedViewController = viewControllers[2];

而视图控制器实际上只不过是:

@implementation SecondViewController

- (instancetype)init

    if (self = [super init])
    
        self.title            = @"second";
        self.tabBarItem.image = [UIImage imageNamed:@"second.png"];
    

    return self;


@end

【问题讨论】:

【参考方案1】:

天哪,在这个错误上花了这么多时间,但这是我的解决方法。而不是:

navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

我创建了自己的NavigationController 作为UINavigationController 的子类:

@implementation NavigationController

- (instancetype)initWithRootViewController:(UIViewController*)rootViewController

    if (self = [super initWithRootViewController:rootViewController])
    
        NSString* className = NSStringFromClass([rootViewController class]);
        NSString* name      = [className stringByReplacingOccurrencesOfString:@"ViewController" withString:@""];

        self.tabBarItem.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@Tab.png", name]];
    

    return self;


@end

然后做:

navigationController = [[NavigationController alloc] initWithRootViewController:viewController];

前提条件是选项卡图像具有与视图控制器类名称相同的基本名称,这在我的应用程序中已经存在。

我在视图控制器的init 方法中设置了self.tabBarItem.image,这似乎导致了我看到的效果。所以除了使用我自己的导航控制器之外,我还简单地删除了在每个单独的视图控制器中设置tabBarItem

【讨论】:

我刚刚遇到了同样的问题。不过,我发现我可以在 UINavigationController 初始化之后设置 tabBarItem,而不是子类化。这可能只是我的特殊情况,但如果其他人遇到这个问题,他们也可以尝试另一种选择。 @kailoon 这是在 ios 7 上,就像我的问题一样吗?

以上是关于在更多选项卡上时,iOS 7 选项卡栏图标暂时消失的主要内容,如果未能解决你的问题,请参考以下文章

获取 Xamarin.Forms 上 TabbedPage 的本机 iOS 系统选项卡栏图标

使用 PaintCode 2 StyleKit 支持 @3x、@2x 选项卡栏图标

选项卡栏在转场后消失

更改在 iOS 7.1 中选择的 TintColor 选项卡栏项目

选项卡栏图标不出现(这些有啥限制?)

如何在具有自定义选项卡 UI(不使用选项卡栏)的 UITabBarController 中删除“更多”选项卡