> ## Content Index
> Fetch the complete content index at: https://mindsers.blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# Ajouter des marges à un UILabel ou un UITextField
- URL: https://mindsers.blog/fr/post/ios-dev-ajouter-des-marges-a-un-uilabel-ou-un-uitextfield/
- Published: 2014-04-08T09:45:34.000Z
- Updated: 2022-08-30T16:11:54.000Z
- Author: Nathanaël Cherrier
- Tags: ios, coding-tech, objective-c, #lang-fr

J’ai récemment rencontré un problème lors du développement d’une application (qui sortira bientôt) : je voulais mettre des marges intérieures à mes [labels](http://fr.wikipedia.org/wiki/Label?ref=mindsers.blog "Définition de label") et pas moyen de trouver une méthode de la class UILabel qui le fait. J’ai détourné le problème en rajoutant moi même les méthodes dont j’avais besoin, voici ce que j’ai fait :

### 1) UILabel

Pour commencer on va créer une class qui hérite de la class UILabel. C’est la classe fille que l’on va ensuite utiliser pour créer des labels ailleurs dans notre application.

```
#import <UIKit/UIKit.h> 

@interface NCLabel : UILabel 
@end

```

Ensuite, on y ajoute des variables, ainsi que leur setters pour stocker et modifier la marges du haut, du bas, de gauche et de droite. Libre à vous de rajouter des getters à votre classe pour récupérer les différentes marges si vous en avez besoin ailleurs dans votre code.

```
#import <UIKit/UIKit.h> 

@interface NCLabel : UILabel { 
    CGFloat _topInset; 
    CGFloat _leftInset; 
    CGFloat _bottomInset; 
    CGFloat _rightInset; 
} 

- (void) setTopInset:(CGFloat)topInset; 
- (void) setBottomInset:(CGFloat)bottomInset; 
- (void) setLeftInset:(CGFloat)leftInset; 
- (void) setRightInset:(CGFloat)rightInset; 

@end

```

Dans le fichier d’implémentation, en plus de vos setters, décommentez ou ajouter la fonction suivante :

```
#import "NCLabel.h" 

@implementation NCLabel 
- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
    } 

    return self; 
} 

// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect { 
    UIEdgeInsets insets = {
        self->_topInset, 
        self->_leftInset, 
        self->_bottomInset, 
        self->_rightInset
    };
 
    return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)]; 
} 

- (void) setTopInset:(CGFloat)topInset {
    self->_topInset = topInset; 
} 

- (void) setBottomInset:(CGFloat)bottomInset { 
    self->_bottomInset = bottomInset; 
} 

- (void) setLeftInset:(CGFloat)leftInset{ 
    self->_leftInset = leftInset; 
} 

- (void) setRightInset:(CGFloat)rightInset{ 
    self->_rightInset = rightInset; 
} 

@end

```

Voilà, vous pouvez maintenant ajouter des marges à vos nouveaux label très simplement. J’ai eu le même problème avec les UITextField mais la méthode précédente ne fonctionnait pas, alors je profite de cet article pour vous donner la solution.

### 2) UITextField

Là aussi, on va créer une classe qui héritera de la classe UITextField. On y ajoutera variables et setters. Puis on surchargera deux méthodes de la classe pour modifier son affichage. Je vous copie mon .h :

```
#import <UIKit/UIKit.h> 

@interface NCTextField : UITextField{ 
    CGFloat _horizontalInset; 
    CGFloat _verticalInset; 
} 

- (void) setHorizontalInset:(CGFloat)horizontalInset; 
- (void) setVerticalInset:(CGFloat)verticalInset; 

@end

```

Et mon .m :

```
#import "NCTextField.h" 

@implementation NCTextField 

- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
        // Initialization code 
    } 

    return self; 
} 

- (CGRect)textRectForBounds:(CGRect)bounds { 
    return CGRectInset( bounds , self->_horizontalInset , self->_verticalInset); 
} 

// text position 
- (CGRect)editingRectForBounds:(CGRect)bounds { 
    return CGRectInset( bounds , self->_horizontalInset , self->_verticalInset ); 
} 

- (void) setHorizontalInset:(CGFloat)horizontalInset{
    self->_horizontalInset = horizontalInset; 
} 

- (void) setVerticalInset:(CGFloat)verticalInset{ 
    self->_verticalInset = verticalInset; 
} 

@end

```

Normalement vous devriez comprendre !