Центральное изображение UIButton со вставкой

Я хотел бы создать UIButton, но с большей площадью касания, чем изображение. (Пример: кнопка 40x40, но изображение только 20x20 по центру).

Это то, для чего нужен imageEdgeInsets?

Я установил его программно: (Это в UIView, который содержит мою кнопку)

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

И из раскадровки

введите описание изображения здесь

Но ни один из них, похоже, не работает.


person Lord Zsolt    schedule 02.06.2014    source источник


Ответы (3)


Я думаю, что вы устанавливаете свое изображение в качестве фонового изображения кнопки, устанавливаете его как изображение, тогда оно никогда не растягивается (остается в исходной форме), и imageEdgeInsets будет работать с ним должным образом.

Нравиться:

введите описание изображения здесь

person Irfan    schedule 02.06.2014
comment
Вы можете попробовать различные настройки вставок с помощью этого простого приложения github.com/tomas789/UIButtonEdgeInsets - person tomas789; 23.01.2017
comment
Ух, это заняло у меня слишком много времени, чтобы найти. Спасибо. - person Epaga; 20.07.2017

Swift 3 и 4 Решение программно.

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

Вот простой пример использования 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)
person Elijah    schedule 10.11.2014