1. 程式人生 > >UITabBar-UITabBarItem的選中圖片未按照原圖樣式顯示的問題mark

UITabBar-UITabBarItem的選中圖片未按照原圖樣式顯示的問題mark

臨時mark一個問題:

問題描述:

今天在寫tabbarViewController時,在設定了各個controller的UITabBarItem以及tabbar的tintcolor之後,發現:

注意,我用的圖是鏤空的;

具體的程式碼如下:

        UITabBarItem *conversTabBarItem = [[UITabBarItem alloc]initWithTitle:@"訊息" image:[UIImage imageNamed:@"conversTabBar_N"] selectedImage:[UIImage imageNamed:@"conversTabBar_H"]];

相關影響顏色的只有tintColor的設定;

    [tabBar setTintColor:APPMAINCOLOR];

它的作用是設定item的全域性高亮顯示,誠然他起了作用;

之所以出現這個問題,是設定在item中的圖片渲染方式造成的問題;

我們看下UIImage的提供的圖片表現模式的列舉:

typedef NS_ENUM(NSInteger, UIImageRenderingMode) {
    UIImageRenderingModeAutomatic,          // Use the default rendering mode for the context where the image is used
    
    UIImageRenderingModeAlwaysOriginal,     // Always draw the original image, without treating it as a template
    UIImageRenderingModeAlwaysTemplate,     // Always draw the image as a template image, ignoring its color information
} NS_ENUM_AVAILABLE_IOS(7_0);

如果不設定的話,預設就是自動處理,具體被表現的方式系統會根據上下文進行選擇;

比如:

navigation bars, tab bars, toolbars, and segmented controls 對設定的圖片就是採用模板的方式;

而其他的imageView和webView對圖片的呈現,則是用原圖的方式;

一旦設定了具體的渲染方式(姑且稱作渲染),圖片就會被強制按照該方式呈現;

現在,我們就明白了為什麼這個圖沒有按照鏤空的方式顯示,修改程式碼如下:

    UITabBarItem *conversTabBarItem = [[UITabBarItem alloc]initWithTitle:@"訊息" image:[[UIImage imageNamed:@"conversTabBar_N"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] selectedImage:[[UIImage imageNamed:@"conversTabBar_H"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
即強制圖片按原圖渲染;

效果如下:

就不感謝誰了,希望對大家有幫助吧。