xcode 自定义 UITabBar 图标 iOS

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18742734/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 03:46:37  来源:igfitidea点击:

Custom UITabBar icons iOS

iosxcodeuitabbarcontroller

提问by Granit

I am developing a tabbed application and i want to integrate custom UITabbar background and icons. I already inserted a custom background but i have a problem with the icons.

我正在开发一个选项卡式应用程序,我想集成自定义 UITabbar 背景和图标。我已经插入了自定义背景,但图标有问题。

This is how the icons are supposed to look:

这是图标的外观:

enter image description here

在此处输入图片说明

But after adding the icons for each view in the storyboard i get grey icons like this:

但是在为故事板中的每个视图添加图标后,我会得到这样的灰色图标:

enter image description here

在此处输入图片说明

Does anyone have an idea why the icons are displayed this way?

有谁知道为什么以这种方式显示图标?

Thank you very much!

非常感谢!

采纳答案by RyanG

This is how I do it in one of my apps. In your AppDelegates didFinishLaunchingWithOptions:method, add this and fill in your image names:

这就是我在我的一个应用程序中的做法。在您的 AppDelegatesdidFinishLaunchingWithOptions:方法中,添加以下内容并填写您的图像名称:

    UITabBarController *tabController = (UITabBarController *)self.window.rootViewController;

    //tab1
    UIImage *selectedImage = [UIImage imageNamed:@"home-tab-selected"];
    UIImage *unselectedImage = [UIImage imageNamed:@"home2-tab"];
    MyTabBar *tabBar = (MyTabBar *)tabController.tabBar;
    UITabBarItem *item1 = [tabBar.items objectAtIndex:0];
    [item1 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage];

    //tab2
    selectedImage = [UIImage imageNamed:@"customers-tab-selected"];
    unselectedImage = [UIImage imageNamed:@"customers-tab"];
    UITabBarItem *item2 = [tabBar.items objectAtIndex:1];
    [item2 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage];

    //tab3
    selectedImage = [UIImage imageNamed:@"maps-tab-selected"];
    unselectedImage = [UIImage imageNamed:@"maps-tab"];
    UITabBarItem *item3 = [tabBar.items objectAtIndex:2];
    [item3 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage];

    //tab4
    selectedImage = [UIImage imageNamed:@"reports-tab-selected"];
    unselectedImage = [UIImage imageNamed:@"reports-tab"];
    UITabBarItem *item4 = [tabBar.items objectAtIndex:3];
    [item4 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage];

    //tab5
    selectedImage = [UIImage imageNamed:@"orders-tab-selected"];
    unselectedImage = [UIImage imageNamed:@"orders-tab"];
    UITabBarItem *item5 = [tabBar.items objectAtIndex:4];
    [item5 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage];


    if ([tabBar respondsToSelector:@selector(setBackgroundImage:)])
    {
        // ios 5 code here
        [tabBar setBackgroundImage:[UIImage imageNamed:@"tab-bg"]];

    }   

Works perfect for me.

非常适合我。

回答by Julien

Using Xcode 6, in order to be able to change images directly from Storyboard, you can do this:

使用 Xcode 6,为了能够直接从 Storyboard 更改图像,您可以这样做:

@IBDesignable class CustomizedTabBarItem: UITabBarItem {
    @IBInspectable var finalImage:UIImage = UIImage() {
        didSet {
            self.image = finalImage.imageWithRenderingMode(.AlwaysOriginal)
        }
    }
    @IBInspectable var finalSelectedImage:UIImage = UIImage() {
        didSet {
            self.selectedImage = finalSelectedImage.imageWithRenderingMode(.AlwaysOriginal)
        }
    }
}

After, you just have to set the images in your storyboard enter image description here

之后,您只需在故事板中设置图像 在此处输入图片说明

回答by Vitor Navarro

I can′t comment yet, so I′ll add as answer.

我还不能发表评论,所以我会添加作为答案。

Since iOS 7 setFinishedSelectedImage:withFinishedUnselectedImage:is deprecated.

由于 iOS 7setFinishedSelectedImage:withFinishedUnselectedImage:已弃用。

To solve this you can do it this way:

要解决这个问题,您可以这样做:

UIImage *selectedImage = [UIImage imageNamed:@"tabbar-highlight"];
selectedImage = [selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *unselectedImage = [UIImage imageNamed:@"tabbar"];
unselectedImage = [unselectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
tabBarItem = [[UITabBarItem alloc] initWithTitle:@"TabBarItem1" image:unselectedImage selectedImage:selectedImage];
//
//OR
//
UIImage *selectedImage = [UIImage imageNamed:@"tabbar-highlight"];
selectedImage = [selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *unselectedImage = [UIImage imageNamed:@"tabbar"];
unselectedImage = [unselectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[yourTabBarItem setImage:unselectedImage];
[yourTabBarItem setSelectedImage:selectedImage];

Hope this help to clarify for iOS7+.

希望这有助于澄清 iOS7+。

回答by rioRodrigues

An updated Version to Julien's answer about IBInspectable is below

Julien 关于 IBInspectable 的回答的更新版本如下

import UIKit

@IBDesignable
class CustomTabBarItem: UITabBarItem {
    @IBInspectable var finalImage: UIImage = UIImage() {
        didSet {
            self.image = finalImage.withRenderingMode(.alwaysOriginal)
            }
        }
    @IBInspectable var finalSelectedImage: UIImage = UIImage() {
       didSet {
            self.selectedImage = finalSelectedImage.withRenderingMode(.alwaysOriginal)
            }
        }
}

回答by user3760958

You can also keep it simple ;)

你也可以保持简单;)

    [tabBarItemName setSelectedImage:[UIImage imageNamed:@"image name"]];

You'll have to declare the tabBarItemName in your ViewController.h

您必须在 ViewController.h 中声明 tabBarItemName

回答by Dan Fairaizl

You can set the finished image of the tab bar icons with setFinishedSelectedImage:withFinishedUnselectedImage:on UITabBarItem

您可以使用setFinishedSelectedImage:withFinishedUnselectedImage:on设置标签栏图标的完成图像UITabBarItem

Check the docs here(look under Appearance)

检查此处的文档(在外观下查看)

The default behavior of the UITabBarItemis to create a mask based on your icon then it applies that special blue treatment as your seeing.

的默认行为UITabBarItem是根据您的图标创建一个蒙版,然后它应用该特殊的蓝色处理作为您的视线。