1

我自定义 UITabbar 的方式在 IOS 5 和 IOS 6 中运行良好,但在 IOS7 中,Tabbar 没有显示任何图像。

IOS6结果:

在此处输入图像描述

IOS7结果:

在此处输入图像描述

在做了一些研究后,我尝试修复现有代码,但没有成功。这是我在 ios6 中运行良好的代码

#import <Foundation/Foundation.h>


@interface CustomTabBarItem : UITabBarItem  
{
UIImage *selectedImg;
UIImage *unSelectedImg;
}

@property (nonatomic, retain) UIImage *selectedImg;
@property (nonatomic, retain) UIImage *unSelectedImg;

@end


#import "CustomTabBarItem.h"


@implementation CustomTabBarItem

@synthesize selectedImg;
@synthesize unSelectedImg;



-(UIImage *) selectedImage
 {
   return self.selectedImg;
}

-(UIImage *) unselectedImage
{
    return self.unSelectedImg;
}

@end

现在在 appDelegate

self.tabBarController.delegate = self;

self.tabBarController.tabBar.frame = CGRectMake(0, self.tabBarController.tabBar.frame.origin.y, self.tabBarController.tabBar.frame.size.width, 49);

for(int i=1;i<=4;i++)
  {
    CustomTabBarItem *tabItem = [[CustomTabBarItem alloc] initWithTitle:@"" image:nil tag:0];
        tabItem.selectedImg=[UIImage imageNamed:[NSString stringWithFormat:@"tab_bar-%d_over_%@.png",i,deviceType]];
    tabItem.unSelectedImg=[UIImage imageNamed:[NSString stringWithFormat:@"tab_bar-%d_%@.png",i,deviceType]];

            UIEdgeInsets titleInsets = UIEdgeInsetsMake(6.0, 0.0, -6.0, 0.0);
    tabItem.imageInsets = titleInsets;
    [[self.tabBarController.viewControllers objectAtIndex:i-1] setTabBarItem:tabItem];
    [tabItem release];

  }

上面的代码在 IOS6 中运行良好,在做了一些研究后,我对 IOS7 做了一些更改

 [[UITabBar appearance] setBarTintColor:[UIColor whiteColor]];

CustomTabBarItem *tabItem = [[CustomTabBarItem alloc] initWithTitle:@"" image:nil tag:0];

tabItem.image = [[UIImage imageNamed:[NSString stringWithFormat:@"tab_bar-%d_over_%@.png",i,deviceType]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];


   tabItem.selectedImage = [UIImage imageNamed:[NSString stringWithFormat:@"tab_bar-%d_%@.png",i,deviceType]];

但结果仍然相同,任何帮助将不胜感激。

4

2 回答 2

4

在https://stackoverflow.com/a/20007782/1755055上查看我的答案,了解我的工作。

我相信在 ios7 中为此使用外观类属性存在限制或错误。

您的标签栏项目正在使用图标图像作为模板并使用淡色对其进行着色。苹果真正想让你做的是为标签栏设计图标,这些图标大多是透明的,这样它们就可以用作模板图像。

有关设计这些的讨论,请参阅MobileHIG 文档中第 204 页左右的条形按钮图标

因此,要设置选定的选项卡栏项目,您需要在可以从 UIViewContoller 获得的“UITabBarItem”上调用“setSelectedImage:”。如果您的 UIViewController 的子类被选项卡上的 NavigationController 包装,则您会从该 ViewController 获取选项卡栏项目。

我使用故事板,所以我可以在 Interface Builder 中设置选项卡图像。selectedImage 属性现在不可用,因此您必须在代码中设置它。我在每个选项卡的导航控制器堆栈顶部显示的每个主视图控制器中都执行了此操作。

您的示例需要按照设计的方式渲染图像,因此您还需要在图像上设置渲染模式。

- (void)viewDidLoad
{
    [super viewDidLoad];

    ...

    [self.navigationController.tabBarItem setSelectedImage:[[UIImage imageNamed:@"MySelectedIcon.png"]
         imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal]];

}
于 2013-11-15T18:44:00.223 回答
0

它不是色调,但你可以用图像来做到这一点:

[self.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"item_seleted.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"item_unselected.png"]];

您是否尝试过直接在选项卡栏的实例上设置 barTintColor,而不是 UIAppearance 代理?

这是 iOS 7 中的一个已知问题。tintColor 用于选定的选项卡图像。selectedImageTintColor 被完全忽略。无法为未选择的标签图像着色。

请参阅 Apple 开发者论坛https://devforums.apple.com/message/851126#851126关于此的讨论。

于 2013-11-14T05:02:04.183 回答