web-dev-qa-db-fra.com

Image centrale UIButton avec encart

Je voudrais créer un bouton UIB, mais avec une zone de prise plus grande que l'image. (Ex: bouton 40x40, mais l'image est seulement 20x20, centrée).

Est-ce à cela que sert imageEdgeInsets?

Je l'ai mis à la fois par programme: (C'est dans la vue UIV qui contient mon bouton)

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

Et du storyboard

enter image description here

Mais aucun d'eux ne semble fonctionner.

22
Lord Zsolt

Je pense que vous définissez votre image comme image d'arrière-plan du bouton, définissez-la comme une image, puis elle ne s'étirera jamais (reste dans sa forme d'origine) et imageEdgeInsets fonctionnera correctement.

Comme:

enter image description here

19
Irfan

Voici un exemple simple de la façon d'utiliser imageEdgeInsets Cela rendra un bouton 20x20 avec une zone de 10 pixels plus grand tout autour (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)
8
Harris

Swift 3 & 4 Solution par programme.

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