自定义NavigationItem的TouchUpInside事件超出了界限

时间:2013-08-10 15:38:41

标签: iphone ios uinavigationbar touch-event

我正在使用自定义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个像素。

导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:1)

这是UINavigationBarButton项的默认行为。 这是关于易用性。顶部的导航栏往往意味着人们的点击率低于您的预期。总是留在那里的间隙,或者有一个足够大的击中区域,用户将手指刺向“导航栏下方”项目的中间将避开死区。