web-dev-qa-db-fra.com

Comment ajouter du padding-left sur un UIButton créé par programme?

J'ai de la difficulté à ajouter du remplissage à gauche sur un UIButton. J'ai un UIButton avec UIControlContentHorizontalAlignmentLeft. Je veux que le texte soit affiché sur le côté gauche mais il est trop à gauche. quand je donne la frontière, ça n'a pas l'air bien. Je voudrais donner un peu de remplissage sur le texte à propos de 5px comme en CSS. J'ai cherché sur Google la solution mais je ne trouve pas de solution particulière pour UIButton. Merci d'avance pour votre aide.

61
MissStack

titleEdgeInsets Marges d'insertion ou de sortie des bords du rectangle de dessin du titre du bouton.

@property (nonatomic) UIEdgeInsets titleEdgeInsets

Discussion Utilisez cette propriété pour redimensionner et repositionner le rectangle de dessin effectif pour le titre du bouton. Vous pouvez spécifier une valeur différente pour chacune des quatre encarts (haut, gauche, bas, droite). Une valeur positive réduit ou insère ce bord, le rapprochant du centre du bouton. Une valeur négative développe ou confine ce bord. Utilisez la fonction UIEdgeInsetsMake pour créer une valeur pour cette propriété. La valeur par défaut est UIEdgeInsetsZero.

Disponibilité Disponible dans iOS 2.0 et versions ultérieures.

Déclaré en UIButton.h

Essayez ceci :)

[myButton setTitleEdgeInsets:UIEdgeInsetsMake(0.0, 5.0, 0.0, 0.0)];

De plus, si vous utilisez un bouton personnalisé, les encarts de contenu et les encarts d'image existent.

Si vous êtes arrivé ici à la recherche de Swift. Ceci est valide Swift 3.0 ????

myButton.titleEdgeInsets = UIEdgeInsets(top: 0.0, left: 5.0, bottom: 0.0, right: 0.0)

Vous pouvez aussi le définir directement. Il est utile si vous souhaitez utiliser une ou deux propriétés.

myButton.titleEdgeInsets.top = 0
myButton.titleEdgeInsets.left = 5
myButton.titleEdgeInsets.bottom = 0
myButton.titleEdgeInsets.right = 0
114
Ryan Poolos

Dans Xcode 6, vous pouvez spécifier un encart de titre dans IB:

Interface builder Edge title inset

26
Sergey Demchenko

Après Xcode 8, si vous souhaitez définir ces incrustations via le constructeur d’interface (IB), vous trouverez ces paramètres d’encart dans l’inspecteur de taille au lieu d’inspecteur d’attributs.

J'espère que cela t'aides.

enter image description here

22
Vaibhav

Voici une meilleure réponse à:

  • éviter de tronquer le titre du bouton
  • éviter que le titre ne s'étende au-delà de la vue du bouton
  • faire en sorte que le cadre du bouton fonctionne bien avec une image.

Code:

extension UIButton {
    func addLeftPadding(_ padding: CGFloat) {
        titleEdgeInsets = UIEdgeInsets(top: 0.0, left: padding, bottom: 0.0, right: -padding)
        contentEdgeInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: padding)
    }
}

Usage:

myButton.addLeftPadding(10)
21
Lucas Chwe

Voici un autre exemple comment résoudre ceci:

 [self.myButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

    float padding_button                = 6.0f;
    UIEdgeInsets titleInsets            = UIEdgeInsetsMake(0.0f, padding_button, 0.0f, -padding_button);
    UIEdgeInsets contentInsets          = UIEdgeInsetsMake(padding_button, 0.0f, padding_button, 0.0f);
    CGFloat extraWidthRequiredForTitle  = titleInsets.left - titleInsets.right;
    contentInsets.right += extraWidthRequiredForTitle;
    [self.myButton setTitleEdgeInsets:titleInsets];
    [self.myButton setContentEdgeInsets:contentInsets];
    [self.myButton sizeToFit];

Aussi, si votre bouton a une image, vous pouvez simplement ajouter:

[self.myButton setImage:[UIImage imageNamed:@"YourImage.png"] forState:UIControlStateNormal];

Bonne chance!

7
Oleg Popov
_myButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
_myButton.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
3
Rapunzel