轉載自:http://blog.csdn.net/kevinwlc/article/details/21467499/
在ios7中,方法setFinishedSelectedImage:withFinishedUnselectedImage: 已經被棄用,所以如果直接設置tabBarItem的selectImage和image時會出現不能顯示圖片的問題,效果可能如圖:

這時候我們就需要調用imageWithRenderingMode:方法來實現

里面有個UIImageRenderingMode(渲染模式),它是一個枚舉

着色(Tint Color)是iOS7界面中的一個重大改變,你可以設置一個UIImage在渲染時是否使用當前視圖的Tint Color。UIImage新增了一個只讀屬性:renderingMode,對應的還有一個新增方法:imageWithRenderingMode:,它使用UIImageRenderingMode枚舉值來設置圖片的renderingMode屬性。該枚舉中包含下列值:

renderingMode屬性的默認值是UIImageRenderingModeAutomatic,即UIImage是否使用Tint Color取決於它顯示的位置。其他情況可以看下面的圖例

以下的代碼說明了使用一個既定的rendering模式創建圖片是多么簡單:

知道了這點我們就可以在ios7中實現想要的效果了

前后效果圖的代碼對比
之前的:

之后的:

IOS_7是一個宏,nc1是一個個viewController

現在的效果很接近了已經,但是發現圖片會向上偏移一部分,
這時候就需要設置tabBarItem.imageInsets, 這是一個UIEdgeInsets 。UIEdgeInsets,由函數 UIEdgeInsetsMake ( CGFloat top, CGFloat left, CGFloat bottom, CGFloat right ); 構造出,分別表示其中的內容/標題/圖片離各邊的距離。它類似於css中的padding, 可以對圖像進行位置的偏移設置。

最后加上這個屬性,代碼如下

最后就實現了想要的效果:

