UITabBar appearance setSelectionIndicatorImage does not work on first launch iOS7

后端 未结 5 2266
你的背包
你的背包 2021-02-13 05:51

I have a customised UITabBar and use the following code in the AppDelegate:

- (void)tabBarController:(MainUITabBarController *)tabBarController didSelectViewCont         


        
相关标签:
5条回答
  • 2021-02-13 06:16

    I am seeing this exact same issue. Here is my didFinishLaunching

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        [self applyStyleSheet];
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
        self.window.backgroundColor = [UIColor redColor];
        self.window.tintColor = [UIColor whiteColor];
        UITabBarController *tabBarController = [self setupTabBarController];
        self.window.rootViewController = tabBarController;
        [self.window makeKeyAndVisible];
    
        return YES;
    }
    

    Here is how I setup the tab bar:

    - (UITabBarController *)setupTabBarController
    {
        UITabBarController *tabBarController = [[UITabBarController alloc] init];
        UINavigationController *nav1 = [[UINavigationController alloc] initWithRootViewController:[[FirstViewController alloc] init]];
        UINavigationController *nav2 = [[UINavigationController alloc] initWithRootViewController:[[SecondViewController alloc] init]];
        UINavigationController *nav3 = [[UINavigationController alloc] initWithRootViewController:[[ThirdViewController alloc] init]];
        UINavigationController *nav4 = [[UINavigationController alloc] initWithRootViewController:[[FourthViewController alloc] init]];
        UINavigationController *nav5 = [[UINavigationController alloc] initWithRootViewController:[[FifthViewController alloc] init]];
        [tabBarController setViewControllers:@[nav1, nav2, nav3, nav4, nav5]];
    
        return tabBarController;
    }
    

    And finally, this is the tab bar customization block:

    - (void)applyStyleSheet
    {
        UITabBar *tabBar = [UITabBar appearance];
        [tabBar setBackgroundImage:[UIImage imageWithColor:[UIColor redColor]]];
        [tabBar setTintColor:[UIColor whiteColor]];
        [tabBar setSelectionIndicatorImage:[UIImage imageNamed:@"tab-selected"]];
        [tabBar setSelectedImageTintColor:[UIColor whiteColor]];
    }
    

    As stated, the "tab-selected" image is not loaded on the first tab. However, I added the following line after [self.window makeKeyAndVisible] so that my tab starts up with a different tab opened, and the "tab-selected" image does show up on this tab:

        [tabBarController setSelectedIndex:1];
    

    So here's my finalized didFinishLaunching with the subtle hack that makes it work :)

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
        {
            self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
            [self applyStyleSheet];
            [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
            self.window.backgroundColor = [UIColor redColor];
            self.window.tintColor = [UIColor whiteColor];
            UITabBarController *tabBarController = [self setupTabBarController];
            self.window.rootViewController = tabBarController;
            [self.window makeKeyAndVisible];
            [tabBarController setSelectedIndex:1];
            [tabBarController setSelectedIndex:0];
    
            return YES;
        }
    
    0 讨论(0)
  • 2021-02-13 06:29
    - (void)customizeTabBar {
    
     UIImageView *customizeTabBar = [[UIImageView alloc]initWithFrame:CGRectMake(0,0,320.0,50)];
    customizeTabBar.image=[UIImage imageNamed:@"Tab_bar.png"];
    
    firstTab = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tab1.png"] highlightedImage:[UIImage imageNamed:@"tab11.png"]];
    [firstTab setFrame:CGRectMake(8.0,01.0,90.0,49.0)];
    [customizeTabBar addSubview: firstTab];
    
    secondTab = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tab2"] highlightedImage:[UIImage imageNamed:@"tab22"]];
    [secondTab setFrame:CGRectMake(115.0,01.0,90.0,49.0)];
    [customizeTabBar addSubview: secondTab];
    
    thirdTab = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tab3"] highlightedImage:[UIImage imageNamed:@"tab33"]];
    [thirdTab setFrame:CGRectMake(223.0,01.0,90.0,49.0)];
    [customizeTabBar addSubview: thirdTab];
    self.tabBar.tag=10;
    [self.tabBar addSubview:customizeTabBar];
    
    }
    
    0 讨论(0)
  • 2021-02-13 06:30

    ok.

    not the best of fixes but hey have to submit.

    Remove the customisation code in the appdelegate and in the projects xib file (is an old project) on the TabBars attributes inspector (using xcode 5) - add the tab bars background and selection images.

    This works for ios7 without the need for any of the customisation code in the appdelegate.

    For pre iOS5 + 6 (this app only supports 5+) however we still need the code so I added a simple check for version and kept the code as is:

    #define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
    
    if(SYSTEM_VERSION_LESS_THAN(@"7.0"))
    
        {
    
            UIImage *tabBackground = [[UIImage imageNamed:@"unselectedtab"]
    
                                      resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    
            // Set background for all UITabBars
    
            [[UITabBar appearance] setBackgroundImage:tabBackground];
        [[UINavigationBar appearance] setTintColor:[UIColor blackColor]];
    
        // Set tint colour for the images for all tabbars
    
        [[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]];
    
        // Set selectionIndicatorImage for all tabbars
    
        [[UITabBar appearance] setSelectionIndicatorImage:nil];
    
        [[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"selectedtab.png"]];
    
    }
    
    0 讨论(0)
  • 2021-02-13 06:33

    Setting the selection indicator image for the tab bar directly once again, apart from doing it via appearance, worked for me!

    - (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;
    }
    
    0 讨论(0)
  • 2021-02-13 06:33

    I think I also have had the same problem when doing my design for the new App in iOS 7!! iOS 7 has been built more of the stuff different as we all were used to things different.

    Here as I have understood we all were using StoryBoards, and were unable to integrate that Segues in our Code! :) So I choose not to mess with the code, after I tried most of all the StackOverFlow Answers regarding this! :) Because, why you wanna do so, when you have given a Goody Good Interface Builder (IB) and Story Boarding Tool?

    Question:
    When we have set our Selected Tab Image, background image specially for the tab bar, it doesn't shows which tab is selected with the image we have set in our code...???

    Solution
    Following are the screenshots of my StoryBoard Settings I did to solve this problem!

    Select your TabBarController from your via document outline panel:
    Select your TabBarController from your via document outline panel

    Set your settings for the Tab Bar from the Utilities Panel:
    Set your settings for the Tab Bar from the Utilities Panel

    Then your Program is set up to run! It now knows that first tab is selected when the App first shows the First Tab View and also which image should be shown for all the Tab Bar indicators when each of them are selected! :)
    hope you all got a clue!!! If I helped you I'm Happy!!! But if I have wasted your Time I'm So Sorry!!! :( But trust me, This worked me like a charm!!!

    0 讨论(0)
提交回复
热议问题