自定义UIBarButtonItem的较小活动区域

6

我有一个带有自定义UIBarButtonItem的UINavigationBar,其中使用UIButton作为其自定义视图。问题在于:自定义按钮的活动区域太大了,如果我在按钮外部至少点击40个像素,它仍然被注册为对按钮的点击。这会导致意外的点击。如何减少这些按钮的活动区域?


3
仅提一下(从问题中应该很明显,但显然并非如此):这不是关于减小按钮本身的大小。它是关于减小响应按钮触摸的区域。通常,该区域与按钮的大小相同,除了在条形按钮项中,活动区域比条形本身略大,以便更容易点击。 - mrueg
3个回答

6

我也发现了这种奇怪的问题。我发现使用一个容器 UIView 可以解决这个问题。例如:

UIButton *menuButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[menuButton addTarget:self action:@selector(revealMenu:) forControlEvents:UIControlEventTouchUpInside];
[menuButton setImage:[UIImage imageNamed:@"menuIcon"] forState:UIControlStateNormal];
UIView *menuButtonContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[menuButtonContainer addSubview:menuButton];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:menuButtonContainer];

0
你是通过Interface Builder添加按钮还是通过编程实现的?无论哪种方式,你都可以使用以下代码行来设置图像的边界:
yourButton.bounds = CGRectMake( 0, 0, yourImage.size.width, yourImage.size.height );  

如果您想要一个完整的例子,这里有一个我在我的一个应用程序中使用过的例子:
    UIImage *image = [UIImage imageNamed:@"audio-off.png"];
    UIButton *myMuteButton = [UIButton buttonWithType:UIButtonTypeCustom];
    myMuteButton.bounds = CGRectMake( 0, 0, image.size.width, image.size.height );    
    [myMuteButton setImage:image forState:UIControlStateNormal];
    [myMuteButton addTarget:self action:@selector(mute) forControlEvents:UIControlEventTouchUpInside];    
    UIBarButtonItem *myMuteBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myMuteButton];   
    navBar.leftBarButtonItem = myMuteBarButtonItem;
    [myMuteBarButtonItem release];

0

我觉得你还没有改变自定义按钮的大小...尝试这样做...在接口构建器中选择要减少活动区域的按钮,然后按“Command+3”或“工具--> 尺寸检查器”来减小 'W' 和 'H' 值...这将使自定义按钮变小,因此活动区域也会减小...

~Raviraja


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接