TabBarItem icon not appearing immediately in ios 8

I have a problem with the tabBarItem icon. Here is a screenshot of part of my storyboard.

Storyboard

There is a basic viewController with several buttons. When one of these buttons is pressed, the tabBarController tab appears with three tabs. In iOS 8, tabBarItems icons are not displayed initially. If I change the view controller, both the icons of the previous and current controller of the .if view are displayed to select the third tab, then all tabBarItems icons will appear. Here is a screenshot of my problem:

First appearance of TabBarController:

1st

If I change the tab:

2nd

Here is the code I use to set the icons (all 30x30 icons) of the tabBarItems in the viewDidLoad method of the first viewController from the TabBarController:

[[[self.tabBarController.viewControllers objectAtIndex:0] tabBarItem] setFinishedSelectedImage:[UIImage imageNamed:@"1d1.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"1b1.png"]]; [[[self.tabBarController.viewControllers objectAtIndex:1] tabBarItem] setFinishedSelectedImage:[UIImage imageNamed:@"2d1.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"2b1.png"]]; [[[self.tabBarController.viewControllers objectAtIndex:2] tabBarItem] setFinishedSelectedImage:[UIImage imageNamed:@"3d1.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"3b1.png"]]; 

Here is a screenshot of iOS 7 that works correctly:

right

Can anyone help me with this?

+6
source share
4 answers

After hours of searching and reading various answers, including the @Zala answer, this piece of code in the viewDidLoad of the first viewController TabBarController made a difference and finally worked.

  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) { UITabBarItem *tabBarItem = [self.tabBarController.tabBar.items objectAtIndex:0]; UIImage *unselectedImage = [UIImage imageNamed:@"1b1.png"]; UIImage *selectedImage = [UIImage imageNamed:@"1d1.png"]; [tabBarItem setImage: [unselectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; [tabBarItem setSelectedImage:[selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; UITabBarItem *tabBarItem1 = [self.tabBarController.tabBar.items objectAtIndex:1]; UIImage *unselectedImage1 = [UIImage imageNamed:@"2b1.png"]; UIImage *selectedImage1 = [UIImage imageNamed:@"2d1.png"]; [tabBarItem1 setImage: [unselectedImage1 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; [tabBarItem1 setSelectedImage: [selectedImage1 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; UITabBarItem *tabBarItem2 = [self.tabBarController.tabBar.items objectAtIndex:2]; UIImage *unselectedImage2 = [UIImage imageNamed:@"3b1.png"]; UIImage *selectedImage2 = [UIImage imageNamed:@"3d1.png"]; [tabBarItem2 setImage: [unselectedImage2 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; [tabBarItem2 setSelectedImage:[selectedImage2 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; [tabBarItem setTitle:@"Φωτογραφίες"]; [tabBarItem2 setTitle:@"360° Φωτογραφία"]; [tabBarItem1 setTitle:@"Βίντεο"]; } else { [[[self.tabBarController.viewControllers objectAtIndex:0] tabBarItem] setFinishedSelectedImage:[UIImage imageNamed:@"1d1.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"1b1.png"]]; [[[self.tabBarController.viewControllers objectAtIndex:1] tabBarItem] setFinishedSelectedImage:[UIImage imageNamed:@"2d1.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"2b1.png"]]; [[[self.tabBarController.viewControllers objectAtIndex:2] tabBarItem] setFinishedSelectedImage:[UIImage imageNamed:@"3d1.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"3b1.png"]]; [[[self.tabBarController.viewControllers objectAtIndex:0] tabBarItem] setTitle:@"Φωτογραφίες"]; [[[self.tabBarController.viewControllers objectAtIndex:2] tabBarItem] setTitle:@"360° Φωτογραφία"]; [[[self.tabBarController.viewControllers objectAtIndex:1] tabBarItem] setTitle:@"Βίντεο"]; } 
+7
source

setFinishedSelectedImage:withFinishedUnselectedImage: from using iOS 7 instead of the image and selectedImage properties of the UITabBarItem .

To configure a custom image:

 UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0]; if ([self iOS7OrAbove]) { //use UIImageRenderingModeAlwaysOriginal to set the custom image for ios 7 and above. tabBarItem1.selectedImage = [[UIImage imageNamed:@"SelectedImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; tabBarItem1.image = [[UIImage imageNamed:@"UnselectedImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; } else { [tabBarItem1 setFinishedSelectedImage:[UIImage imageNamed:@"SelectedImage"] withFinishedUnselectedImage:[UIImage imageNamed:@"UnselectedImage"]]; } 

Hope this works great.

Even if setFinishedSelectedImage:withFinishedUnselectedImage: deprecated in iOS7, it works fine in iOS7, but not in 8.

+5
source

You can also set these images through the storyboard: http://imgur.com/lmyi1Nw

If you want this dynamically, I would suggest inheriting from UITabBarController and overwrite it with viewWillAppear:

+1
source

Yes, this cannot be done using storyboards - you need a code that needs to be written.

You need to encode it in viewdidload action

 UITabBar *tabBar = self.tabBar; UITabBarItem *targetTabBarItem = [[tabbar items] objectAtIndex:0]; // whichever tab-item UIImage *selectedIcon = [UIImage imageNamed:@"name-of-selected-image.png"]; [targetTabBarItem setSelectedImage:selectedIcon]; 
0
source

Source: https://habr.com/ru/post/975714/


All Articles