donner une marge de texte / remplissage à l’UiButton sur l’Iphone

J’ai la disposition suivante et j’essaie d’append un remplissage à gauche et à droite.

les contrôles sont des Uibutton désactivés. entrer la description de l'image ici

Mon code pour créer un bouton est le suivant:

UIButton *buttonTime = [[UIButton alloc] initWithFrame:CGRectMake(90, 10, 50, 20)]; [buttonTime setBackgroundImage:[[UIImage imageNamed:@"bubble.png"] stretchableImageWithLeftCapWidth:9 topCapHeight:13] forState:UIControlStateDisabled]; [buttonTime setTitle:@"27 feb, 2011 11:10 PM" forState:UIControlStateDisabled]; [buttonTime setTitleColor:[UIColor blackColor] forState:UIControlStateDisabled]; buttonTime.titleLabel.font=[UIFont fontWithName:@"Helvetica" size:8.0]; buttonTime.titleLabel.lineBreakMode= UILineBreakModeWordWrap; [buttonTime setEnabled:FALSE]; [scrollView addSubview:buttonTime]; [buttonTime release]; 

 @property(nonatomic) UIEdgeInsets titleEdgeInsets; 

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 chacun des quatre encarts (haut, gauche, bas, droite). Une valeur positive diminue, ou insère, ce bord – le rapprochant du centre du bouton. Une valeur négative se développe, ou des outsets, ce bord. Utilisez la fonction UIEdgeInsetsMake pour construire une valeur pour cette propriété. La valeur par défaut est UIEdgeInsetsZero.

La réponse de Toro est parfaite. Vous pouvez également définir les valeurs d’encart à partir de l’inspecteur de taille à l’intérieur du storyboard ou du xib.

entrer la description de l'image ici

La définition des encarts de contenu empêchera que le titre de UIButton soit réduit / tronqué

bords de contenu

Le défi avec la réponse acceptée est que la définition de titleEdgeInsets est la limitation, comme indiqué dans la documentation d’Apple:

Cette propriété est uniquement utilisée pour positionner le titre lors de la mise en page. Le bouton> n’utilise pas cette propriété pour déterminer insortingnsicContentSize et> sizeThatFits (_ :).

Cela signifie que la définition des marges ne fonctionne que si le bouton est explicitement dimensionné pour correspondre à l’étiquette du titre et aux marges. Si un titre est trop long ou les marges trop grandes, le texte du titre peut être tronqué. Ceci est correct pour un bouton dont le titre est connu au moment de la compilation, mais pour un titre de bouton de longueur variable, peut poser problème.

Une autre approche titleEdgeInsets en compte la longueur du titre de variable consiste à laisser le titleEdgeInsets comme valeur par défaut. Une fois le titre du bouton défini, ajoutez des contraintes de largeur et de hauteur explicites adaptées à l’étiquette de titre du bouton et aux marges supplémentaires. Par exemple:

 let margin: CGFloat = 10.0 let button = UIButton() button.setTitle("My Button Title", for .normal) button.widthAnchor.constraint(equalToConstant: button.titleLabel!.insortingnsicContentSize.width + margin * 2.0).isActive = true button.heightAnchor.constraint(equalToConstant: button.titleLabel!.insortingnsicContentSize.height + margin * 2.0).isActive = true 

Positionnez le bouton sans append d’autres contraintes de hauteur ou de largeur et il apparaîtra correctement quelle que soit la longueur du titre.

ce lien fonctionne comme un charme avec la propriété contentHorizontalAlignment

Cette option est également viable si ce n’est pas trop ennuyeux d’utiliser une sous-classe UIButton

 class Button: UIButton { override var insortingnsicContentSize: CGSize { get { let baseSize = super.insortingnsicContentSize return CGSize(width: baseSize.width + titleEdgeInsets.left + titleEdgeInsets.right, height: baseSize.height + titleEdgeInsets.top + titleEdgeInsets.bottom) } } } 

Ensuite, utilisez titleEdgeInsets comme vous le souhaitez

  let button = Button() ... configure button button.titleEdgeInsets = ... 

J’ai trouvé un moyen simple / génial d’append des bordures aux boutons de texte (et d’avoir des marges gauche / droite):

  1. Créer un bouton avec un titre.

  2. Placez le bouton dans le storyboard, alignez où vous voulez et ajoutez ensuite une contrainte de largeur forcée qui est un nombre pair (j’ai utilisé 20, donc il ajoute 10 points de chaque côté). Cela forcera la bordure autour de la largeur que vous avez créée.

  3. Utilisez le code pour créer une bordure. par exemple:

     myTextButton.backgroundColor = .clear myTextButton.layer.cornerRadius = 5 myTextButton.layer.borderWidth = 2 myTextButton.layer.borderColor = UIColor.white.cgColor 
  4. Définissez titleInset gauche sur 2 via l’éditeur (maintenant sous Inspecteur de taille) ou par code. Cela semble centrer le texte, mais cette valeur peut être différente pour différents textes et tailles de texte.

Ce post est pour XCode 8.1 et Swift 3.