J’ai la disposition suivante et j’essaie d’append un remplissage à gauche et à droite.
les contrôles sont des Uibutton désactivés.
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.
La définition des encarts de contenu empêchera que le titre de UIButton soit réduit / tronqué
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):
Créer un bouton avec un titre.
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.
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
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.