web-dev-qa-db-fra.com

Comment centrer un UILabel sur UIView

Comment centrer l'UILabel sur l'UIView? J'utilise le code suivant

float width = weatherView.bounds.size.width; 
float height = weatherView.bounds.size.height; 

[self.label setFrame:CGRectMake(width-100,height-100, 100, 100)];
38
john doe

Que diriez-vous:

[self.label setCenter:view.center];
102
PengOne

Si l'étiquette est une sous-vue:

[self.label setCenter:CGPointMake(view.frame.size.width / 2, view.frame.size.height / 2)]

N'utilisez pas view.center sauf si l'étiquette et la vue ont la même vue d'ensemble.

S'il n'y a pas de connexion immédiate, vous devrez transformer le centre de la vue en espace de coordonnées du parent de l'étiquette. Ensuite, vous pouvez utiliser la réponse de PengOne avec le point transformé.

35
Nashenas

Utilisez NSTextAlignmentCenter si ce que vous avez est l'étiquette déjà définie et que vous souhaitez centrer son contenu.

cell.menuLabel.textAlignment = NSTextAlignmentCenter;
20
Alex Delgado

Une meilleure solution possible est:

First: Si vous faites cela par programmation, vous devrez initialiser avec le cadre et certaines personnalisations:

// Simple example
int yPosition = 10;
UILabel *label = [[UILabel alloc] initWithFrame: CGRectMake(0, yPosition, self.view.frame.size.width, 0)];
[label setText: @"Testing..."];
[label setBackgroundColor: [UIColor clearColor]];
[label setNumberOfLines: 0];
[label sizeToFit];

Second: Si une étiquette que vous essayez de centrer, vous pouvez simplement l'exécuter après avoir appelé le sélecteur setNumberOflines et 0 value assigné, votre texte aura toutes les lignes nécessaires, et la méthode sizeToFit appelée pour avoir une bonne personnalisation, et enfin:

[self.label setCenter: CGPointMake(self.view.center.x, self.label.center.y)];

Cela centrera only the X axis, et le Y axis restera comme vous le souhaitez dans l'initialisation du cadre.

PS: Il est également valide si ce n'est pas un UILabel mais dépend du contrôle que vous utilisez aura besoin d'une autre personnalisation simple ou ni l'un ni l'autre, et si vous voulez seulement centrer par programmation mais interface builder conçu, il suffit d'exécuter le second code.

16
rokimoki

La réponse de PengOne/Alex Lockwood est simple et utile. Si vous avez l'intention de prendre en charge la rotation, ajoutez ce qui suit pour la garder centrée:

[self.myLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth];
2
DenVog

Il y a deux possibilités si votre UILabel est ajouté via .xib ou bien par programmation.

Si le premier cas est ajouté via .xib, vous pouvez définir la position à partir de l'onglet d'inspection de la taille du fichier xib avec la propriété 'Arranger'

Et si le second cas persiste, vous pouvez définir comme --- [self.label setCenter: view.center];

2
Nijar

Quelque chose comme ça devrait faire l'affaire ... Assurez-vous que votre étiquette est définie pour avoir un alignement centré et est suffisamment grande/large pour gérer votre chaîne de texte.

float viewWidth = weatherView.frame.size.width;
float viewHeight = weatherView.frame.size.height;
float labelWidth = label.frame.size.width;
float labelHeight = label.frame.size.height;

float xpos = (viewWidth/2.0f) - (labelWidth/2.0f);
float ypos = (viewHeight/2.0f) - (labelHeight/2.0f);

[label setFrame:CGRectMake(xpos,ypos,labelWidth,labelHeight)];

Je pense que cela devrait faire ce que vous demandez.

2
Richard Baxter