クリック可能にする必要があるカスタムビューを作成しているため、ボタンがあり、ナビゲーションバーの左側にある必要があります (したがって、leftBarButtonItem を置き換えます)。
(id)initWithCustomView:(UIView *)customView; を使用してカスタム ビューを UIBarButtonItem に追加すると、配置はまさに私が望むものですが、「クリック」できません。カスタム ビューを UIButton サブビューとして追加し、UIBarButtonItem でボタンを使用する場合 - (id)initWithCustomView:(UIView *)customView; クリックすることはできますが、カスタム ビューのトップマージンは約 26 ポイントになり、navigationBar の高さを超えています。
これは正しい位置にありますが、クリックできません
UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 120, 44)];
....
UIBarButtonItem *customButton = [[UIBarButtonItem alloc] initWithCustomView:customView];
self.navigationItem.leftBarButtonItem = customButton;
これは間違った位置にありますが、クリックできます
UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 120, 44)];
....
UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addSubview:customView];
[button addTarget:self action:@selector(userProfile) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *customButton = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = customButton;
私が自分自身を明確にしたことを願っています。私はこれについて本当に無知です。UIButton で imageEdgeInsets を強制し、フレームの "y" 原点を負の値に変更しようとしましたが、何も機能しません。
編集: @kschaeffer ソリューションが機能します。ボタン フレームを customView フレームと同じに設定する必要がありました。
これは iOS 7 では機能しなくなりました
この場合、不要な左マージンを取得し、クリック可能でなくなります (私が見る限り、ボタンのタッチ イベントは記録されません)。