使用插入将UIButton图像居中

24

我想创建一个UIButton,但是希望其点击区域比图像大。(例如:40x40按钮,但图像仅为20x20,且居中)。

imageEdgeInsets 是用来做这个的吗?

我已经通过编程方式设置了它:(这是包含我的按钮的UIView中的代码)

- (void)awakeFromNib {
    [_plusButton setImageEdgeInsets:UIEdgeInsetsMake(10, 10, 10, 10)];
    [_plusButton setContentMode:UIViewContentModeCenter];
}

从故事板开始

在此输入图像描述

但是它们似乎都不起作用。

3个回答

20

我理解您已将图像设置为按钮的背景图像,因此请将其设置为普通图像,这样它就不会被拉伸(保持原始形状),并且imageEdgeInsets将可以在其上正常工作。

例如:

输入图像描述


您可以使用这个简单的应用程序 https://github.com/tomas789/UIButtonEdgeInsets 尝试不同的插入设置。 - tomas789
1
这个花了我太长时间才找到。谢谢。 - Epaga

12

使用 Swift 3 和 4 的解决方案,以编程方式实现。

buttonOutlet.setImage(UIImage(name: "iconWhite"), for: .normal)
buttonOutlet.imageEdgeInsets = UIEdgeInsets(top: 10, left:10, bottom: 10, right: 10)

9

这里是一个使用imageEdgeInsets的简单示例。以下代码将创建一个大小为20x20的按钮,并且使其周围的可点击区域增大10个像素(40x40)。

    var expandHittableAreaAmt: CGFloat = 10
    var buttonWidth: CGFloat = 20
    var button = UIButton.buttonWithType(UIButtonType.Custom) as UIButton
    button.frame = CGRectMake(0, 0, 
        buttonWidth + expandHittableAreaAmt*2, 
        buttonWidth + expandHittableAreaAmt*2)
    button.imageEdgeInsets = UIEdgeInsetsMake(expandHittableAreaAmt, 
        expandHittableAreaAmt, expandHittableAreaAmt, expandHittableAreaAmt)
    button.setImage(UIImage(named: "buttonImage"), forState: .Normal) //20x20 image
    button.addTarget(self, action: "didTouchButton:", forControlEvents: .TouchUpInside)

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