UIButton点击区域太大

Posted

技术标签:

【中文标题】UIButton点击区域太大【英文标题】:UIButton hit area is too big 【发布时间】:2013-10-17 04:09:31 【问题描述】:

在我的应用程序中,所有 UIButton 对象的行为都很奇怪。似乎命中区域是原来的两倍。因此,当我单击一个按钮时,我实际上是在单击它旁边或下方的按钮。

我以编程方式以及使用 Interface Builder 创建了按钮,但两者的结果相同。

在我的应用程序中,我使用了主题代理。但即使我禁用它,按钮的行为仍然很奇怪。

这是创建按钮的代码:

    _btOpenContact = [UIButton buttonWithType:UIButtonTypeCustom];
    _btOpenContact.frame = Rect(0, CGRectGetHeight(self.view.bounds) - 200, 100, 100);
    [_btOpenContact addTarget:self action:@selector(navigateToContact) forControlEvents:UIControlEventTouchUpInside];
    _btOpenContact.backgroundColor = RGB(233, 12, 24); resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 3, 0)] forState:UIControlStateNormal];
    [self.view addSubview:_btOpenContact];

有人知道我做错了什么吗???提前致谢

更新

我在其中一个按钮上添加了一个断点:

    <UIButton: 0x1e0a1220; frame = (0 348; 100 100); opaque = NO; layer = <CALayer: 0x1e0a11e0>>

还有里面的CALayer:

    <CALayer:0x1e0a11e0; position = CGPoint (50 398); bounds = CGRect (0 0; 100 100); delegate = <UIButton: 0x1e0a1220; frame = (0 348; 100 100); opaque = NO; layer = <CALayer: 0x1e0a11e0>>; backgroundColor = <CGColor 0x1e0a1300> [<CGColorSpace 0x1d53db80> (kCGColorSpaceDeviceRGB)] ( 0.913725 0.0470588 0.0941176 1 )>

【问题讨论】:

_btOpenContact.frame..? 抱歉...我的项目中有一些宏。 Rect其实就是CGRectMake(x, y, w, h) 你能加个截图吗 @manujmv 我上传了一些屏幕:help.pngmenu.png 代码应该有问题,按钮的行为与您描述的不同。您必须仔细检查代码。而且,顺便问一下,你放在按钮上的背景图片怎么样,是拉伸、缩放还是类似的? 【参考方案1】:

我认为您必须更改 uibutton 中使用的图像大小,按钮点击区域在 uibutton 框架下,但图像大小比按钮框架小。

【讨论】:

即使我不使用图像,问题仍然存在。【参考方案2】:

您已将按钮的宽度设置为 320,这意味着它将覆盖整个屏幕,将您的宽度和高度更改为 100 * 100 并设置任何背景颜色进行测试。通过查看按钮的背景颜色,您将了解按钮的可见区域是什么。

【讨论】:

试过了,还是一样的问题。我用新的(测试)代码更新了我的问题 可见区域和点击区域不一样? 遗憾的是没有.....点击区域更大。但现在我也注意到点击区域是按钮本身的两倍【参考方案3】:

虽然我仍然不知道是什么导致了这个错误。 (可能是 ios7 sdk 中的一个错误...?)我通过子类化 UIButton 并进行命中测试来检查我是否真的点击了按钮来修复它。

    #import "TTButton.h"

    @implementation TTButton 

    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
    
        if (CGRectContainsPoint([self bounds], point)) 
            NSLog(@"inside");
            return self;
        

        return nil;
    

    @end

【讨论】:

以上是关于UIButton点击区域太大的主要内容,如果未能解决你的问题,请参考以下文章

使 UIButton 的点击区域更大

如何在 Swift 中扩展特定 UIButton 的点击区域?

UIButton具有自定义不对称可点击区域?

为啥UIButton高亮区域那么小?

IOS自定义UIbutton,怎样让点击的有效区域集中在图标内?

如何使整个区域可点击?