自定义导航项的 TouchUpInside 事件在边界之外



我使用自定义的UIBarButtonItem来替换leftBarButtonItem,但是当我在按钮外部按下时,在按钮的20个像素范围内,它会检测到它是被按下的按钮。

这是我的代码:

- (void)changeNavbarButtons
{
    UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
    [backButton setBackgroundImage:[UIImage imageNamed:@"navbarBack.png"] forState:UIControlStateNormal];
    [backButton addTarget:self action:@selector(popViewController) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
    UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
                                       initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
                                       target:nil action:nil];
    negativeSpacer.width = -5;
    self.navigationItem.leftBarButtonItems = [NSArray
                                              arrayWithObjects:negativeSpacer, backItem, nil];    self.navigationItem.hidesBackButton = YES;
}

negativeSpacer将按钮向左移动5个像素。

是什么原因造成的?

这是UINavigationBarButton项的默认行为。这是关于易用性。顶部的导航栏往往意味着人们点击的比你预期的要低。一定要把这个缺口留在那里,或者有一个足够大的点击区域,让用户把手指刺向你的"导航栏下方"项目的中间,这样可以避开死区。

最新更新