24

UIBarButtonItem を作成し、次のようにナビゲーション バーに追加しています。

(void)viewDidLoad { 

   ...

   // Add the refresh button to the navigation bar
   UIButton *refreshButton = [UIButton buttonWithType:UIButtonTypeCustom];
   [refreshButton setFrame:CGRectMake(0,0,30,30)];
   [refreshButton setImage:[UIImage imageNamed:@"G_refresh_icon.png"] forState:UIControlStateNormal];
   [refreshButton addTarget:self action:@selector(refreshData) forControlEvents:UIControlEventTouchUpInside];
   UIBarButtonItem *refreshBarButton = [[[UIBarButtonItem alloc] initWithCustomView:refreshButton] autorelease];
   self.navigationItem.leftBarButtonItem = refreshBarButton;
}

実行すると正しいように見えますが、x = 0 からおよそ 100 までのナビゲーション バーをタップすると、バー ボタンの項目を選択できます。

4

6 に答える 6

13

UIBarButtonItem1 つの方法として、を呼び出して を作成することを検討してくださいinitWithCustomView:。これは、箱から出して「選択された」状態にならないという点で理想的ではありません。また、ボーダー付きの背景 (その外観が必要な場合) をボタン画像と合成する必要がありますが、それにより、フレームをより直接的に指定できます。ツールバー項目。タイトルに画像の代わりにテキストを使用している場合でも、サブビューとして背景画像を追加する必要がある場合があります。とにかく、私は今同じ問題を抱えており、このコードは私のために働きます:

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"button-image.png"]];
imageView.frame = CGRectMake(0, 0, 43, 30);

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:imageView];

self.navigationItem.leftBarButtonItem = barButtonItem;

現在、これは、 にUIBarButtonItem追加された のUINavigationController自動サイズ変更を制限する唯一の方法navigationItemです。

または、私のソリューションよりも徹底したマギーのソリューションを試してください

于 2012-12-03T22:36:58.863 に答える
6

これを行うには、インターフェイス ビルダーからバー ボタン項目に画像をドロップし、次のコードでカスタム ビューの幅を変更します。

CGRect frame = self.navigationItem.leftBarButtonItem.customView.frame;
frame.size.width = 141;
self.navigationItem.leftBarButtonItem.customView.frame = frame;
于 2013-01-11T15:27:06.070 に答える
5

次のアプローチが機能しました。ボタンの幅と高さを変更し、アクション アイテムも追加するコードを参照してください。

UIButton *imageButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 22, 22)];
[imageButton setBackgroundImage:[UIImage imageNamed:@"message_button"] forState:UIControlStateNormal];
[imageButton addTarget:self action:@selector(messageButtonTapped) forControlEvents:UIControlEventAllEvents];
UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:imageButton];
self.navigationItem.leftBarButtonItem = leftBarButtonItem;

注: UIBarButtonItem のターゲットとアクションは、画像ビューには適用されません。

于 2015-05-27T09:57:06.957 に答える