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];
我正在尝试在我的导航栏中使用自定义按钮,没有左右空格作为边框,如下图所示:
这是创建 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];