【问题标题】:iOS8 - not displaying custom tabbar imagesiOS8 - 不显示自定义标签栏图像
【发布时间】:2014-11-17 16:12:19
【问题描述】:

我有一个以前存在的应用程序(iOS8 之前),它使用带有自定义图像的 UITabbar。标签栏在 iOS7 模拟器和设备中可见,但在 iOS8 中不显示。是什么导致了这个问题?我正在使用UITabBarItemimageselectedImage 属性和UIImageRenderingModeAlwaysOriginal 图像。是 XCode 6 或 iOS 模拟器(iPhone)的问题,还是我们不能在标签栏中使用自定义图像(只允许灰度图像!?)? reference for image property of tabbaritem

  • iOS7:

  • iOS8:

【问题讨论】:

    标签: ios objective-c iphone ios6 ios8


    【解决方案1】:

    假设您的项目中有一组图像:

       NSArray *icons_low = [[NSArray alloc]init];
       icons_low =  [NSArray arrayWithObjects:@"first_tab_ic.png",  @"second_tab_ic.png", @"third_tab_ic.png", @"4th_tab_ic.png", nil];
       for(int i=0;i<icons_low.count;i++) {
              UITabBarItem *item = [self.tabBarController.tabBar.items objectAtIndex:i];
              NSString *img_name = [NSString stringWithFormat:@"%@", [icons_low objectAtIndex:i] ];
     /* deprecated -> comment such lines  
      [item setFinishedSelectedImage:[UIImage imageNamed:img_name] withFinishedUnselectedImage:
             [UIImage imageNamed:img_name]]; */
             item.image = [[UIImage imageNamed:img_name]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
             item.selectedImage = [[UIImage imageNamed:img_name]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    
        }
    

    但我也怀疑您的标签栏(检查 XIB)设置了与 setBarStyle 相关的内容。

    【讨论】:

    • 是的,已经设置了 barStyle。但 iOS7 也是如此。我只在 ios6 上使用setFinishedSelectedImage:withFinishedUnselectedImage:,其他代码相同。
    • [[UIView appearanceWhenContainedIn:[UITabBar class], nil] setTintColor:[UIColor colorWithRed:(254/255.0) green:(196/255.0) blue:(36/255.0) alpha:1]] ; //以防万一:)
    • 我已将translucent 设置为YES,并将标签栏的backgroundImage 设置为色调。
    • 在 didload 后尝试 NSLog item.image 内容,didappear。它还在吗?
    • 我正在考虑检查每个标签栏元素,看看它是否没有设置为系统类型。
    【解决方案2】:

    我初始化标签栏项目的方法存在问题(在登录屏幕本身完成登录时的方法中)。我在登录屏幕的 viewDidLoad 中有登录检查逻辑,如果用户登录,我会转到主屏幕。但是在登录的 viewWillAppear 中,我正在重置 tabbarItems。

    在 iOS 8 之前的登录屏幕没有显示,我在主屏幕中有初始化的标签栏。但在 iOS 8 中,即使我从 viewDidLoad 转到主屏幕,它也会显示登录屏幕(一段时间)。

    为了解决这个问题,我将标签栏项目的初始化代码移到了主屏幕。

    【讨论】:

      【解决方案3】:

      您可以使用以下代码:

      UITabBarItem *maps = [[UITabBarItem alloc] initWithTitle:nil image:[[UIImage imageNamed:@"map_icon"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] tag:3];
      [navMaps setTabBarItem:maps];
      

      【讨论】:

      • 虽然此代码可能会解决问题,但如果您添加有关问题的简要说明以及您的代码如何解决问题会更好。仅代码的答案可能对未来的访问者没有帮助。
      猜你喜欢
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      相关资源
      最近更新 更多