2

iOS 5 で戻るボタンをカスタマイズしようとしています。これは、使用したい背景画像です。

背景画像

23 x 30 ポイントです。

カスタマイズする私のコードは次のとおりです。

UIImage *buttonBackground = [[UIImage imageNamed:@"navbar-backbutton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 11, 0, 11) resizingMode:UIImageResizingModeStretch]; 
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Geri" style:UIBarButtonItemStylePlain target:nil action:nil];
[backButton setBackButtonBackgroundImage:buttonBackground forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
[self.navigationItem setBackBarButtonItem:backButton];

これでうまくいくはずです。画像の幅は 23 ポイントで、左右のオフセットを 11 ポイントに設定しています。しかし、これが結果です (「Geri」はトルコ語で「戻る」を意味します)。

戻るボタン

私が理解していないのは、最後のサイズの違いです。何が間違っているのかわかりません。これに関するアイデアはありますか?

ありがとう。

4

2 に答える 2

11

コードの何が問題になっていますか?

使用している画像が正しくありませUIEdgeInsetsん。UI に画像のストレッチを開始するのが早すぎるように指示しています。の左の値を変更して、UIEdgeInsetsさらに数ポイント右にストレッチを開始する必要があります。

エッジ インセットとは

エッジインセットがどのように機能するかを理解していない別の回答についてコメントしたことに気付きました。だから私はあなたのためにこれを描きました。

ここに画像の説明を入力

黒い線は、画像の境界を表します。オレンジ色の線は、画像を伸縮可能にするゾーンを表しています。ボタンの丸い部分が終了すると、左キャップが表示されます。右端の丸みを帯びた角の直前に右キャップが表示されます。

を使用して、これを UIKit に表すことができますUIEdgeInsets

UIEdgeInsetsは次のように定義されています (ドキュメントを参照してください):

typedef struct {
    CGFloat top, left, bottom, right;
} UIEdgeInsets;

解決

あなたの場合、使用しようとしているボタンをダウンロードしましたが、左のキャップは 14 ピクセルから開始する必要があることがわかりました。右端は 18 ピクセル (右端から 5 ピクセル) の位置にある必要があります。

したがって、画像のサイズを正しく変更できるようにするには、次のエッジ インセットを使用する必要があります。

UIEdgeInsets correctInsets = UIEdgeInsetsMake(0.0, 14.0, 0.0, 5.0);

互換性 (iOS 5 & 6)

UIImageまた、使用しているサイズ変更方法は、iOS 6 からのみ利用できることに注意してください。

-resizableImageWithCapInsets:resizingMode:

iOS 5 で正常に動作させるには、代わりに次の方法を使用する必要があります。

-resizableImageWithCapInsets:

UIImage のドキュメントを参照してください

于 2013-05-14T19:49:19.483 に答える
1

このコードを試してください

 NSString *ver = [[UIDevice currentDevice] systemVersion];
    IosVersion = [ver floatValue];

    UIButton * backButton ;
    backButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 23, 19)];
    if(IosVersion >= 5.0)

        [backButton setBackgroundImage:[[UIImage imageNamed:@"navbar-backbutton"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0f, 15.0f, 0.0f, 15.0f)]forState:UIControlStateNormal];

    else

        [backButton setBackgroundImage:[[UIImage imageNamed:@"navbar-backbutton"]stretchableImageWithLeftCapWidth:15 topCapHeight:15]forState:UIControlStateNormal];


    [backButton.titleLabel setText:@"Geri"];
    [backButton setFrame: CGRectMake(0, 0, 23, 19)];

    [backButton addTarget:self action:@selector(goToHome) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *HomeButton = [[UIBarButtonItem alloc] initWithCustomView: backButton];
    [self.navigationItem setLeftBarButtonItem:HomeButton];
于 2012-09-14T13:37:31.197 に答える