点击UIButton小巧的区域

时间:2015-11-10 13:53:04

标签: ios swift uibutton

我有一个我这样创建的UIButton:

let closeButton = UIButton(type: .System)
closeButton.backgroundColor = UIColor(r: 92, g: 92, b: 118, alpha: 1)
closeButton.setImage(UIImage(named: "closeCross")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate), forState: .Normal)
closeButton.tintColor = UIColor.whiteColor()
closeButton.imageEdgeInsets = UIEdgeInsets(top: -10, left: -10, bottom: -10, right: -10)

closeButton.addTarget(self, action: "close", forControlEvents: .TouchUpInside)
closeButton.frame = CGRectMake(messageView.frame.maxX - 30, 0, 20, 20)
closeButton.center.y = messageView.bounds.midY

问题是,只有当您距离UIButton的中心位置时,才会触发点按。我设置的图片是一个交叉X的png。

即使我点击十字架(但不是完全在中间,感谢模拟器的精确度),它也不起作用。

我不明白。背景并不清楚。我是否更改内容/图像边缘插入并不会改变一件事。我是否使用图像渲染模式并不能改变一件事。

3 个答案:

答案 0 :(得分:5)

保持UI按钮大小至少为44x44的最佳做法。 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/LayoutandAppearance.html

  

通过为每个交互元素提供足够的间距,让人们可以轻松地与内容和控件进行交互。给可触发控件一个大约44 x 44点的命中目标。

所以我会将你的框架设置为大于20pts,你的图像尺寸是多少20pts?可以在按钮外部剪裁,检查clipToBounds是否设置为yes。

还有一种更激进的方法,那就是创建一个触摸区域至少为44的UIButton的子类。

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    CGFloat widthDelta = 44.0 - self.bounds.size.width;
    CGFloat heightDelta = 44.0 - self.bounds.size.width;
    CGRect largerBounds = CGRectInset(self.bounds, -0.5 * widthDelta, -0.5 * heightDelta);
    return CGRectContainsPoint(largerBounds, point);
}

另一件事是使用揭示(http://revealapp.com/

调查按钮

答案 1 :(得分:2)

实际上我是如何解决的:

closeButton.imageEdgeInsets = UIEdgeInsets(top: 15, left: 15, bottom: 15, right: 15)
closeButton.frame = CGRectMake(noConnectionMessageView.frame.maxX - 40, 0, 40, 40)

答案 2 :(得分:0)

只有在UIButton上没有标题和图像时才会发生。如果你不想添加标题,那就是黑客......

只需添加空格作为标题文字即可。按钮的整个区域将开始响应。

奇迹般地为我工作。