LoginSignup
5
5

More than 5 years have passed since last update.

UINavigationBarのleftBarButtonItem の当たり判定が見た目よりも広かった件

Posted at
  • UINavigationBarの左に出るボタンの当たり判定が、見た目よりも広い
  • 当たり判定をコントロールしたい思ったら、UINavigationBarにaddSubviewで対応可能
  • addSubviewしなくても良い方法があったら教えてください

UINavigationBarの左に出るボタンの当たり判定は、見た目よりも広い

指で操作しているときは気付きにくいですが、UINavigationBarの左側に出てくるボタン(Backとか)は、当たり判定が見た目よりも広かったです。

XCodeにて「Master-Detail View」なプロジェクトを作って試したところ、真ん中のタイトル部分の横ぐらいまでが「クリックしたら反応する」エリアでした。

当たり判定のあるエリア

UINavigationBarに色々入れる場合、サイズなどもiOS側で判断し配置しています。その一環として、「見た目よりも広く反応する」を、iOS側でやっているのだと思います。押したつもりで押せてなかった!を未然に防いでいるのでしょう。

とは言ってもこれが「誤動作」になる場合もある

さて、普通にUITableViewでうにゃうにゃやってるときはこの動作はありがたいのですが、"UINavigationBar直下にクリックする何か"を配置すると、この広がったエリアが邪魔になることがあります。
そのデザインはどーよ?というのはありますが、技術的に回避する方法としては、「UIBarButtonItemを使うのをあきらめて、UIButtonをaddSubviewしてしまう」手はあります。

Controller.m
-(void)viewDidLoad
{
...
//    self.navigationItem.leftBarButtonItem = self.editButtonItem;
    // ↑の代わりに、素のUIButtonを貼り付ける↓
    self.button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [self.button setTitle:@"エ" forState:UIControlStateNormal];
    self.button.frame = CGRectMake(2,2,40,40);
    [self.navigationController.navigationBar addSubview:self.button];
...
}

addSubviewしただけなので、表示/非表示の制御はちゃんと書く必要があります。

とわいえ、小手先な回避策だと思ってます。

UINavigationBarのleftItemの、当たり判定をコントロールする方法を知ってる人がいたら、Qiitaで記事を書いて @paming にメンションもらえると喜びます。

5
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5