在ios7中,方法setFinishedSelectedImage:withFinishedUnselectedImage: 已經被棄用,所以如果直接設置tabBarItem的selectImage和image時會出現不能顯示圖片的問題,效果可能如圖:
這時候我們就需要調用imageWithRenderingMode:方法來實現
里面有個UIImageRenderingMode(渲染模式),它是一個枚舉
下面信息來自: http://www.cocoachina.com/gamedev/misc/2014/0117/7715.html
著色(Tint Color)是iOS7界面中的一個重大改變,你可以設置一個UIImage在渲染時是否使用當前視圖的Tint Color。UIImage新增了一個只讀屬性:renderingMode,對應的還有一個新增方法:imageWithRenderingMode:,它使用UIImageRenderingMode枚舉值來設置圖片的renderingMode屬性。該枚舉中包含下列值:
UIImageRenderingModeAutomatic // 根據圖片的使用環境和所處的繪圖上下文自動調整渲染模式。
UIImageRenderingModeAlwaysOriginal // 始終繪制圖片原始狀態,不使用Tint Color。
UIImageRenderingModeAlwaysTemplate // 始終根據Tint Color繪制圖片,忽略圖片的顏色信息。
renderingMode屬性的默認值是UIImageRenderingModeAutomatic,即UIImage是否使用Tint Color取決于它顯示的位置。其他情況可以看下面的圖例
以下的代碼說明了使用一個既定的rendering模式創建圖片是多么簡單:
UIImage *img = [UIImage imageNamed:@"myimage"];
img = [img imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
知道了這點我們就可以在ios7中實現想要的效果了
前后效果圖的代碼對比
之前的:
之后的:
IOS_7是一個宏,nc1是一個個viewController
現在的效果很接近了已經,但是發現圖片會向上偏移一部分,這時候就需要設置tabBarItem.imageInsets, 這是一個UIEdgeInsets 。UIEdgeInsets,由函數 UIEdgeInsetsMake ( CGFloat top, CGFloat left, CGFloat bottom, CGFloat right ); 構造出,分別表示其中的內容/標題/圖片離各邊的距離。它類似于css中的padding, 可以對圖像進行位置的偏移設置。
最后加上這個屬性,代碼如下
[objc] view plain copy
print?
UIEdgeInsets insets = UIEdgeInsetsMake(6, 0, -6, 0);
//微信
KVWeChatViewController *wvc = [[KVWeChatViewController alloc] init];
wvc.titleLabel.text = @"微信";
UINavigationController *nc1 = [[UINavigationController alloc] initWithRootViewController:wvc];
nc1.tabBarItem.title = @"微信";
if (IOS_7) {
nc1.tabBarItem.imageInsets = insets;
UIImage *img1 = [UIImage imageNamed:@"tabbar_mainframe_ios7.png"];
UIImage *imgS1 =[UIImage imageNamed:@"tabbar_mainframeHL_ios7.png"];
nc1.tabBarItem.selectedImage = [imgS1 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
nc1.tabBarItem.image = [img1 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
} else {
[nc1.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"tabbar_mainframeHL_ios7.png"]
withFinishedUnselectedImage:[UIImage imageNamed:@"tabbar_mainframe_ios7.png"]];
}
最后就實現了想要的效果:
歡迎批評指正,謝謝~