質問

私のNAVバーには、カスタムアイコンを備えたRightBarButtonItemがいくつかあります(アイコン画像は白で、iOS 6の基本的な配色でうまく機能します)。

iOS 7では、initwithtitleを使用して画像をロードする(コードスニペット1を参照)は、アイコンの「白い」色を適切なグローバル色に置き換えます(この場合はダークブルーの特定の色)

コードスニペット1:

UIBarButtonItem *refreshButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:(UIBarButtonItemStyle) UIBarButtonSystemItemCancel target:(self) action:@selector(refreshList)];

refreshButton.image = [UIImage imageNamed:@"RefreshIcon.png"];

ただし、InitWithCustomViewを使用して、アイコンが視界から外れている動作の奇妙な変化を克服する必要がありました。基本的なアイデアは、アイコンのサイズを具体的に設定することでした。 initwithcustomviewはサイジングの問題を解決しましたが、グローバルな色合いでボタン画像を表示せず、画像の色(白)で表示されます。コードスニペット2は、initWithCustomViewでボタンを作成する方法を示しています。

コードスニペット2:

CGRect frameCustomButton2 = CGRectMake(0.0, 0.0, 18.0, 18.0);
UIButton *customButton2 = [[UIButton alloc] initWithFrame:frameCustomButton2];
[customButton2 setBackgroundImage:iconRefreshButton forState:UIControlStateNormal];
UIBarButtonItem *barCustomButton2 =[[UIBarButtonItem alloc] initWithCustomView:customButton2 ];
barCustomButton2.image = iconRefreshButton;
[customButton2 addTarget:self action:@selector(refreshList) forControlEvents:UIControlEventTouchUpInside];

もちろん、このコードはすべて(void)viewdidloadにあります。私は次のようなことを試しました:

barCustomButton2.tintColor = [UIColor blackColor];  //doesn't work

または[barbuttonappearance setintcolor:[uicolor blackcolor]]; //機能しません

そして、彼らは画像の白い色を無効にしません。それはまるでカスタムビューの作成がグローバルな色合いの色を見ると起こるかのようですか?

ボタンのアイコンがグローバルな色合いを確実に採用するにはどうすればよいですか?

ありがとう!

役に立ちましたか?

解決

これをルートコメントに入れて、「回答」チェックマークのより良いコンテキストを提供し、より良いフォーマットを与えることを望んでいました。

私はこれを理解することができました!画像に常にテンプレートとしてレンダリングするように指示できます。これにより、グローバルな色合いの色を強制します。

UIImage *iconRefreshButton = [UIImage imageNamed:@"MyIconFilename.png"];
iconRefreshButton = [iconRefreshButton imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

デフォルトは、設定しない場合、「uiimagerenderingmodeautomatic」です。これは、コンテキストに基づいてテンプレートまたは元の画像としてレンダリングされることを意味します。

他のヒント

最初のコードスニペットで抱えていた問題を回避する必要があります。または、その画像をマスクとして使用して色合いの色を表示するuibuttonサブクラスを作成する必要があります。 drawRect:.

最初のアプローチをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top