UITabBar-UITabBarItem的選中圖片未按照原圖樣式顯示的問題mark
阿新 • • 發佈:2019-01-27
臨時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]];
效果如下:
就不感謝誰了,希望對大家有幫助吧。