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)];
Que diriez-vous:
[self.label setCenter:view.center];
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é.
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;
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
.
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];
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];
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.