为啥这个 UITabBarItem 图像切换代码在 iOS 7 上有效,而在 iOS 7.1 上无效?

Posted

技术标签:

【中文标题】为啥这个 UITabBarItem 图像切换代码在 iOS 7 上有效,而在 iOS 7.1 上无效?【英文标题】:Why does this UITabBarItem image switching code work on iOS 7 but not iOS 7.1?为什么这个 UITabBarItem 图像切换代码在 iOS 7 上有效,而在 iOS 7.1 上无效? 【发布时间】:2014-03-11 14:19:58 【问题描述】:

这是在我的 AppDelegate.m 文件中。这段代码在 ios 7 上完美运行。UITabBarItem 将被选中,选中的那一张的图像更改为“按下”图像,而其他图像会变回来。

现在代码在 iOS 7.1 中根本无法使用。奇怪的。有人知道为什么吗?

7.0(注意设置图片已正确更改为填充白色):

7.1(注意设置中没有白色填充):

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

    if (IS_IOS7_AND_UP)
    
        NSLog(@"%d", (int)tabBarController.selectedIndex);

        UITabBarItem *tbi = (UITabBarItem *)(tabBarController.tabBar.items)[tabBarController.selectedIndex];
        UITabBarItem *tb2 = (UITabBarItem *)(tabBarController.tabBar.items)[2];
        UITabBarItem *tb3 = (UITabBarItem *)(tabBarController.tabBar.items)[3];
        UITabBarItem *tb4;

        if ([tabBarController.tabBar.items count] > 4)
            tb4 = (UITabBarItem *)(tabBarController.tabBar.items)[4];


        switch (tabBarController.selectedIndex) 
                case 0:

                    tb2.image = [UIImage imageNamed:@"settings-icon-ios7"];
                    tb3.image = [UIImage imageNamed:@"help-icon-ios7"];
                    break;

                case 1:

                    tb2.image = [UIImage imageNamed:@"settings-icon-ios7"];
                    tb3.image = [UIImage imageNamed:@"help-icon-ios7"];
                    break;

                case 2:

                    tbi.image = [UIImage imageNamed:@"settings-icon-ios7-pressed"];
                    tb3.image = [UIImage imageNamed:@"help-icon-ios7"];
                    break;

                case 3:

                    tbi.image = [UIImage imageNamed:@"help-icon-ios7-pressed"];
                    tb2.image = [UIImage imageNamed:@"settings-icon-ios7"];
                    break;

                case 4:

                    tb2.image = [UIImage imageNamed:@"settings-icon-ios7"];
                    tb3.image = [UIImage imageNamed:@"help-icon-ios7"];
                    break;

                default:
                    break;
            
      

【问题讨论】:

你的 IS_IOS7_AND_UP 宏是如何定义的? 为什么不直接使用UITabBarItem的selectedImage属性呢? @bjtitus - 实际上不知道该属性...我会调查它。 @Flexicoder - 它进入 if 语句就好了。 #define IS_IOS7_AND_UP ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) @bjtitus 是对的,原来iOS7.1如果要在代码中手动设置标签栏图标,需要单独设置tabBarItem.selectedImage,而在 【参考方案1】: cmets 中的

bjtitus 正确回答了我。我现在改用以下代码(在创建标签栏而不是在委托上),这解决了问题:

UITabBarItem *tb0 = (UITabBarItem *)(tabController.tabBar.items)[0]; //main
UITabBarItem *tb1 = (UITabBarItem *)(tabController.tabBar.items)[1]; //wishlist
UITabBarItem *tb2 = (UITabBarItem *)(tabController.tabBar.items)[2];
UITabBarItem *tb3 = (UITabBarItem *)(tabController.tabBar.items)[3];
UITabBarItem *tb4;

if ([tabController.tabBar.items count] > 4)
    tb4 = (UITabBarItem *)(tabController.tabBar.items)[4];

if ([[[NSBundle mainBundle] objectForInfoDictionaryKey:@"MultiApp"] boolValue])

    tb2.selectedImage = [UIImage imageNamed:@"settings-icon-ios7-pressed"];
    tb3.selectedImage = [UIImage imageNamed:@"appswitch-tab-ios7-pressed"];
    tb4.selectedImage = [UIImage imageNamed:@"help-icon-ios7-pressed"];

else

    tb2.selectedImage = [UIImage imageNamed:@"settings-icon-ios7-pressed"];
    tb3.selectedImage = [UIImage imageNamed:@"help-icon-ios7-pressed"];

【讨论】:

以上是关于为啥这个 UITabBarItem 图像切换代码在 iOS 7 上有效,而在 iOS 7.1 上无效?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UITabbaritem 上设置图像?

UITabBarItem 内的图像位置

UITabBarItem 图像颜色在第一次被选中后变为蓝色

更改 UITabBarItem 图像的颜色

UITabBarItem 图像颜色为灰色,而原始图像为白色

如何减少 UITabBarItem 图像和文本之间的垂直填充?