我有一个自定义的UITabBar,并在AppDelegate中使用以下代码:

- (void)tabBarController:(MainUITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
[self customizeTabBar];
}


- (void)customizeTabBar {

    NSLog(@"*******customizeTabBar*******");
    UIImage *tabBackground = [[UIImage imageNamed:@"unselectedtab"]
                  resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    // Set background for all UITabBars
    [[UITabBar appearance] setBackgroundImage:tabBackground];
    // Set tint color for the images for all tabbars
    [[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]];
    // Set selectionIndicatorImage for all tabbars
    [[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"selectedtab"]];

}

- (void)tabBarController:(MainUITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed
{
    NSLog(@"*******didEndCustomizingViewControllers*******");
}

在iOS5 +中这一切都很好,但是在7中,第一次加载第一个TabBarItem时,项目指示器为白色,并且似乎已选择了按钮,但未加载“selectedTab”图像。

当我按下另一个选项卡时,新选项卡为红色并正确显示-此后选择的第一个或任何选项卡栏项目也是如此-仅在首次启动时不起作用。

customTabBar会被调用,但是所选的图像不会在首次启动时出现。

didEndCustomizingViewControllers似乎根本没有被调用。

这不适用于iOS7上的仿真器或设备-但适用于iOS5、6。

有任何想法吗?
提前致谢。

最佳答案

除了通过外观进行设置外,再次直接为标签栏设置选择指示器图像对我来说很有效!

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

    UITabBarController *tabBarContr = (UITabBarController *)self.window.rootViewController;
    ...
    [[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"tab_bar_selection_indicator.png"]];

    // iOS7 hack: to make selectionIndicatorImage appear on the selected tab on the first app run
    [[tabBarContr tabBar] setSelectionIndicatorImage:[UIImage imageNamed:@"tab_bar_selection_indicator.png"]];

    return YES;
}

07-26 07:04