36

UIBarButtonItemに表示したい画像がありますが、何らかの理由でその輪郭のみが表示され、残りはすべて白です。実際に画像を表示するにはどうすればよいですか?

ありがとう!

4

5 に答える 5

66

他のiOS7+ソリューションがあります:

NSString *iconFilename = // ...
UIImage *image = 
    [[UIImage imageNamed:iconFilename] 
        imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIBarButtonItem *barButtonItem = 
    [[UIBarButtonItem alloc] initWithImage:image
                                     style:UIBarButtonItemStylePlain 
                                    target:self 
                                    action:@selector(onBarButtonItemTapped:)];

スウィフト5:

let iconFilename: String = // ...
let image = UIImage(named: iconFilename)?.withRenderingMode(.alwaysOriginal)
let barButtonItem = UIBarButtonItem(image: image, 
                                    style: .plain, 
                                    target: self, 
                                    action: #selector(onBarButtonItemTapped(_:)))

UIImage.hからの抽出:

...ナビゲーションバー、タブバー、ツールバー、およびセグメント化されたコントロールは、前景画像をテンプレートとして自動的に処理します... UIImageRenderingModeAlwaysTemplateを使用して、画像を常にテンプレートとしてレンダリングするか、UIImageRenderingModeAlwaysOriginalを使用して、画像を常に次のようにレンダリングすることができます。オリジナル。

于 2014-12-24T16:31:21.160 に答える
65

更新: iOS 7以降で利用可能な、より簡単な解決策については、MANIAK_dobriiの回答を参照してください。


UIBarButtonItemの画像の使用方法は次のとおりです。

UIImage *image = [UIImage imageNamed:@"buttonImage.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.bounds = CGRectMake( 0, 0, image.size.width, image.size.height );    
[button setImage:image forState:UIControlStateNormal];
[button addTarget:myTarget action:@selector(myAction) forControlEvents:UIControlEventTouchUpInside];    
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
…
于 2009-12-02T19:44:21.337 に答える
44

コーディングをまったく含まない別の方法があります。

まず、バーに配置する画像をAssets.xcassetsドキュメントに配置します。

アセットブラウザで画像を選択します。

画像を選択

右側の垂直ツールバーで、その画像の属性インスペクターを開きます。

属性インスペクター

「レンダリング」で「元の画像」を選択します。

元の画像

ストーリーボードではボタンは引き続き色合いでペイントされますが、シミュレーターで実行すると元の画像が表示されます。

シミュレーター

画像のデフォルトのレンダリングモードは、UIコントロールごとに異なります。ただし、属性インスペクターでこのパラメーターを設定すると、画像が常に特定のレンダリングモードで表示されるように強制できます。

同じ画像を異なるコントローラーで異なるレンダリングモードで表現する必要がある場合は、MANIAK_dobriiからの応答がより適切です。

于 2016-05-14T10:08:21.140 に答える
11

Swift 3:

let iconname = // ...
let image = UIImage(named: iconname)?.withRenderingMode(.alwaysOriginal)
let barButtonItem = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(self. onBarButtonItemTapped))
self.navigationItem.leftBarButtonItem = barButtonItem
于 2016-12-09T09:31:13.333 に答える
7

いいえ。ヒューマンインターフェイスガイドラインで読むことができるように

アイコンの外観を決定したら、次のガイドラインに従ってアイコンを作成します。

PNG形式を使用します。適切なアルファを備えた純白を使用してください。ドロップシャドウを含めないでください。アンチエイリアシングを使用します。斜角を追加する場合は、それが90°であることを確認してください(これを支援するために、アイコンの上部に配置された光源を想像してください)。ツールバーとナビゲーションバーのアイコンの場合、約20x20ピクセルのアイコンを作成します。タブバーアイコンの場合、約30x30ピクセルのアイコンを作成します。

注:ツールバー、ナビゲーションバー、およびタブバーに指定するアイコンは、アプリケーションに表示されるアイコンを作成するためのマスクとして使用されます。フルカラーのアイコンを作成する必要はありません。

于 2009-12-02T19:44:53.270 に答える