web-dev-qa-db-fra.com

Est-il possible d'ajuster la position x, y pour titleLabel de UIButton?

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 = ???
114
RAGOpoR
//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)
438
cannyboy

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.

Attribute inspector setting

39
eladleb

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
14
drawnonward

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
    }

}
2
Luca Davanzo