UIBarButton 点击​​区域比 customView 大

UIBarButton tap area bigger than customView

我正在尝试在我的导航栏中使用自定义按钮,没有左右空格作为边框,如下图所示:

这是创建 barButton 的代码:

UIImage *backImage = [UIImage imageNamed:@"back"];
UIImage *backImageTapped = [UIImage imageNamed:@"back_tap"];

UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setImage:backImage forState:UIControlStateNormal];
[backButton setImage:backImageTapped forState:UIControlStateHighlighted];

backButton.frame = CGRectMake(0, 0, 44, 44);

[backButton addTarget:self
                action:@selector(backTaped)
      forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *backBarButton =[[UIBarButtonItem alloc] initWithCustomView:backButton];

[self.navigationItem setLeftBarButtonItem:backBarButton];

然后我使用插入负宽度的 barButtomItem 的 UINavigationItem 扩展删除空格:

UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
space.width = -16;
return space;

此时看起来不错,但问题是两个按钮的可点击区域不是每张图片的大小,而是更大,类似于下一张图片的灰色区域:

我读过很多问题,试图用更改 hitTestEdgeInsets () 或覆盖 - (UIEdgeInsets)alignmentRectInsets 的 UIButton 类别来解决它,但似乎没有什么可以为我解决...

提前感谢您的帮助

最后,我通过将 UIButton 用作子视图的中间 UIView 并将 UIView 用作 UIBarButtonItem 的自定义视图来实现它。

问题是我无法解释为什么......但它有效

代码:

UIImage *backImage = [UIImage imageNamed:@"back"];
UIImage *backImageTapped = [UIImage imageNamed:@"back_tap"];

UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setImage:backImage forState:UIControlStateNormal];
[backButton setImage:backImageTapped forState:UIControlStateHighlighted];

backButton.frame = CGRectMake(0, 0, 44, 44);

[backButton addTarget:self
                action:@selector(backTaped)
      forControlEvents:UIControlEventTouchUpInside];

UIView *viewBackButton = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
[viewBackButton addSubview:backButton];

UIBarButtonItem *backBarButton =[[UIBarButtonItem alloc] initWithCustomView:viewBackButton];

[self.navigationItem setLeftBarButtonItem:backBarButton];