我有一个我这样创建的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。
即使我点击十字架(但不是完全在中间,感谢模拟器的精确度),它也不起作用。
我不明白。背景并不清楚。我是否更改内容/图像边缘插入并不会改变一件事。我是否使用图像渲染模式并不能改变一件事。
答案 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上没有标题和图像时才会发生。如果你不想添加标题,那就是黑客......
只需添加空格作为标题文字即可。按钮的整个区域将开始响应。
奇迹般地为我工作。