【问题标题】:UIBarButton tap area bigger than customViewUIBarButton 点击​​区域大于 customView
【发布时间】:2016-03-02 17:14:31
【问题描述】:

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

这是创建 te 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];

我使用 UINavigationItem 扩展删除了空格,该扩展插入了一个负宽度的 barButtomItem:

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

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

我已经阅读了很多问题,试图通过更改 hitTestEdgeInsets (https://stackoverflow.com/a/13067285/3560424) 或覆盖 - (UIEdgeInsets)alignmentRectInsets 的 UIButton 类别来解决它,但似乎没有什么可以为我解决...

提前感谢您的帮助

【问题讨论】:

  • 嗨,你可以试试下面的代码:- UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, button_width, button_height)]; [backButton setImage:[UIImage imageNamed:@"back.png"] forState:UIControlStateNormal]; [backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside]; self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];

标签: ios objective-c uinavigationbar uibarbuttonitem uinavigationitem


【解决方案1】:

最后我通过使用带有 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];

【讨论】:

  • 不知道你是怎么发现的,但它确实有效!此外,如果要垂直对齐按钮,可以更改容器视图的高度。谢谢大佬!
  • @NextDeveloper 条形按钮的点击区域大于其大小。当您使用自定义视图时,可点击区域被限制为其父大小,而不是苹果最初给出的放大大小。
猜你喜欢
  • 1970-01-01
  • 2010-10-22
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 2022-10-08
  • 1970-01-01
相关资源
最近更新 更多