Est-il possible d'ajuster la position x, y pour le titleLabel
d'un UIButton
?
Voici mon code:
UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setFrame:CGRectMake(0.0f, 0.0f, 100.0f, 100.0f)];
[btn setTitle:[NSString stringWithFormat:@"Button %d", i+1] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
btn.titleLabel.frame = ???
//make the buttons content appear in the top-left
[button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
[button setContentVerticalAlignment:UIControlContentVerticalAlignmentTop];
//move text 10 pixels down and right
[button setTitleEdgeInsets:UIEdgeInsetsMake(10.0f, 10.0f, 0.0f, 0.0f)];
Et dans Swift
//make the buttons content appear in the top-left
button.contentHorizontalAlignment = .Left
button.contentVerticalAlignment = .Top
//move text 10 pixels down and right
button.titleEdgeInsets = UIEdgeInsetsMake(10.0, 10.0, 0.0, 0.0)
La manière la plus simple de le faire ( visuellement consiste à utiliser l'inspecteur d'attributs ** (apparaît lorsque modification d'un xib/storyboard), définissant la propriété "Edge" sur le titre, ajustant ses encarts, puis définissant la propriété "Edge" sur l'image et ajustant en conséquence. C'est généralement mieux que de le coder, car il est plus facile à entretenir et très visuel.
Dérivez de UIButton et implémentez la méthode suivante:
- (CGRect)titleRectForContentRect:(CGRect)contentRect;
Modifier:
@interface PositionTitleButton : UIButton
@property (nonatomic) CGPoint titleOrigin;
@end
@implementation PositionTextButton
- (CGRect)titleRectForContentRect:(CGRect)contentRect {
contentRect.Origin = titleOrigin;
return contentRect;
}
@end
Pour mes projets, j'ai cet utilitaire d'extension:
extension UIButton {
func moveTitle(horizontal hOffset: CGFloat, vertical vOffset: CGFloat) {
self.titleEdgeInsets.left += hOffset
self.titleEdgeInsets.top += vOffset
}
}