0

そのように初期化されたボタンがあります>

self.button = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
                                                            target:self 
                                                            action:@selector(doAction)];

後で、そのようにカスタムの背景をそれに付けています>

    [self.button  setBackgroundImage:[UIImage imageNamed:@"customNavBar_button_right_enabled"] 
                            forState:UIControlStateNormal 
                          barMetrics:UIBarMetricsDefault];

そしてそれをnavbarに置きます。

   [self.navigationItem setRightBarButtonItem:self.button 
                                     animated:NO];

この画像は固定サイズです。そのボタンに、UIEdgeInsets で「インテリジェントな」サイズ変更なしで完全にカスタムの背景画像を設定したい.サイズ変更はしたくない. しかし、何らかの理由で、インセットがアクティブであるように動作し、幅が大きくなるようにサイズ変更され、幅の広いボタンを提供するために画像のほぼ中央半分が大幅に引き伸ばされます。

なぜこうなった?どうすればこれを防ぐことができますか?

4

1 に答える 1

1

カスタム イメージでバー ボタン アイテムを作成する最も簡単な方法は次のとおりです。

  1. UIButton をストーリーボードにドラッグします。
  2. ボタンのタイプをカスタムに設定し、そのボタンの画像を設定します。
  3. ボタンをツールバーにドラッグします。

ストーリーボードは自動的に UIBarButtonItem を作成し、UIButton をサブビューとして追加します。または、ストーリーボードを使用したくない場合は、次を実装できます。

// Initialize the UIButton
UIImage *buttonImage = [UIImage imageNamed:@"buttonImage.png"];
UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];
[aButton setImage:buttonImage forState:UIControlStateNormal];
aButton.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height);

// Initialize the UIBarButtonItem
UIBarButtonItem aBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:aButton];

// Set the Target and Action for aButton
[aButton addTarget:self action:@selector(aButtonClicked:) forControlEvents:UIControlEventTouchUpInside];

それが役に立てば幸い!

編集: aBarButtonItem を UIToolbar に追加することを忘れないでください。

于 2012-10-25T16:46:25.237 に答える