2013-06-05 14 views
5

come mai il UILabel disegnato in questo codice non è nel centro della view?UILabel impostato al centro di vista

//create the view and make it gray 
UIView *view = [[UIView alloc] init]; 
view.backgroundColor = [UIColor darkGrayColor]; 

//everything for label 
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,42,21)]; 

//set text of label 
NSString *welcomeMessage = [@"Welcome, " stringByAppendingString:@"username"]; 
welcomeMessage = [welcomeMessage stringByAppendingString:@"!"]; 
label.text = welcomeMessage; 

//set color 
label.backgroundColor = [UIColor darkGrayColor]; 
label.textColor = [UIColor whiteColor]; 

//properties 
label.textAlignment = NSTextAlignmentCenter; 
[label sizeToFit]; 

//add the components to the view 
[view addSubview: label]; 
label.center = view.center; 

//show the view 
self.view = view; 

La linea, label.center = view.center; deve spostare il label al centro della view. Lo sposta invece verso il punto in cui il centro di label si trova nell'angolo a sinistra dello view come mostrato di seguito.

screenshot http://gyazo.com/2d1c064a671e32c7eb004647232fa430.png

Qualcuno sa perché?

+1

Prima di tutto perché lo fai 'self.view = vista'? Non ti serve, secondo la tua 'view' non ha un set di frame. Terzo, usa label.center = self.view.center. – danypata

+0

Primo, perché sto costruendo una vista all'interno di un'applicazione. In secondo luogo, come faccio a farlo. Terzo, uso 'view.center' perché sto creando una nuova vista. Ho bisogno di impostare la vista a 'UIView * view' usando' self.view = view' –

+0

Suppongo che questo codice sia in '-viewDidLoad'. Destra? –

risposta

4

È necessario inizializzare la tua vista con una cornice:

UIView *view = [[UIView alloc] initWithFrame:self.view.frame]; 
+0

Grazie per una risposta semplice, giusta. :) –

4

Ciò è causato dalla variabile view non avente un telaio definito. Di default ha una cornice impostata su (0, 0, 0, 0), quindi il suo centro è (0, 0).

Quindi quando si esegue label.center = view.center;, si imposta il centro dell'etichetta su (0 - label.width/2, 0 - label.height /2). (-80.5 -10.5; 161 21) nel tuo caso.

Non v'è alcuna necessità di una nuova UIView se il UIViewController già uno, solo lavoro con self.view.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    //create the view and make it gray 
    self.view.backgroundColor = [UIColor darkGrayColor]; 

    //everything for label 
    UILabel *label = [[UILabel alloc] init]; 

    //set text of label 
    // stringWithFormat is useful in this case ;) 
    NSString *welcomeMessage = [NSString stringWithFormat:@"Welcome, %@!", @"username"]; 
    label.text = welcomeMessage; 

    //set color 
    label.backgroundColor = [UIColor darkGrayColor]; 
    label.textColor = [UIColor whiteColor]; 

    //properties 
    label.textAlignment = NSTextAlignmentCenter; 
    [label sizeToFit]; 

    //add the components to the view 
    [self.view addSubview: label]; 
    label.center = self.view.center; 
} 

Si noti inoltre che facendo label.center = self.view.centerwill not work properly when rotating to landscape mode.

0

Il tuo codice avrebbe funzionato bene se lo metti nei viewDiLayoutSubviews invece di viewDidLoad

Problemi correlati