構造は次のとおりです。
ストーリーボードには、Tab Bar Controller
オブジェクトを含むTab Bar
があります。このオブジェクトには、次のメソッドのみを持つカスタムクラスがあります。
- (void)awakeFromNib
{
NSArray *imageNames = @[@"test1", @"test2", @"test3", @"test4", @"test5"];
for (int i=0; i<5; i++) {
UITabBarItem *item = [self.items objectAtIndex:i];
NSString *imageName = [imageNames objectAtIndex:i];
item.image = [[UIImage imageNamed:imageName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
item.selectedImage = [UIImage imageNamed:[imageName stringByAppendingString:@"-selected"]];
}
}
選択したバージョンと選択していないバージョン(異なる色)の両方のタブバーアイコンを含むAsset Catalog
を作成しました。
documentation for UIImageRenderingModeAlwaysOriginal
言及テンプレートとして扱わずに、常に元の画像を描画します。元の画像の色を保持する必要があります。これは発生していないようで、 this 提案も機能しませんでした。
代わりに、選択した状態で、タブバーアイコンがデフォルトの青い色合いになります。
私が気づいたことの1つは、didFinishLaunchingWithOptions
のAppDelegate
で次のこと( ここ から取得)を実行すると、選択した色を設定できることです。私が望むタブバーアイコン:
[[UITabBar appearance] setTintColor:[UIColor purpleColor]];
setTintColor
のドキュメントには次のように記載されています。
タブバーのタブバーアイテムに適用する色合いの色。 iOS 7.0以降、タブバーのタブバーアイテムに適用される色合いの色は、タブバー自体から始まり、ビュー階層の最初のデフォルト以外の色合いの色になります。
これは、タブバーアイコンの色(画像自体の元の色)に関係なく、選択した状態では常にtintColor
の色になることを意味しますか?
それとも私は何か間違ったことをしている/何かを逃していますか?
IOS7.0および7.1でこの問題が発生しています。
完璧な質問、本当によく説明されています。
選択した画像にimageWithRenderingMode:UIImageRenderingModeAlwaysOriginal
を設定していません。
selectedImage
にimageWithRenderingMode:UIImageRenderingModeAlwaysOriginal
を追加するだけです。
item.selectedImage = [[UIImage imageNamed:[imageName stringByAppendingString:@"-selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
この他をチェックしてください answer 。
Swift:
for item in self.tabBar.items!{
item.selectedImage = item.selectedImage?.withRenderingMode(.alwaysOriginal)
item.image = item.image?.withRenderingMode(.alwaysOriginal)
}
非選択画像を常に元のレンダリングに設定し、選択1を常にテンプレート)に設定しますrender私のためにトリックをしました。
iOS 1およびSwift 5.1のソリューション
let item = UITabBarItem(title: "item_title",
image: UIImage(named: "img")?.withRenderingMode(.alwaysOriginal),
selectedImage: UIImage(named:"img_selected")?.withRenderingMode(.alwaysTemplate))