2013-06-05 22 views
5

Dlaczego w tym kodzie UILabel nie znajduje się środek view?UILabel ustawiony na środek widoku

//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; 

Linia, label.center = view.center; należy przesunąć label do centrum view. Ale zamiast tego przesuwa go tam, gdzie środek label znajduje się w lewym rogu rogu view, jak pokazano poniżej.

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

Czy ktoś wie dlaczego?

+1

Przede wszystkim dlaczego robisz 'self.view = widok "? Nie potrzebujesz tego, po drugie twój widok nie ma zestawu ramek. Po trzecie, użyj etykiety.center = self.view.center. – danypata

+0

Po pierwsze, ponieważ buduję widok w aplikacji. Po drugie, jak to zrobić. Po trzecie, używam 'view.center', ponieważ tworzę nowy widok. Muszę ustawić widok na 'UIView * view' przy użyciu' self.view = view' –

+0

Przypuszczam, że ten kod jest w '-viewDidLoad'. Dobrze? –

Odpowiedz

4

Trzeba init widoku z ramką:

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

Dzięki za prostą, właściwą odpowiedź. :) –

4

Jest to spowodowane zmienną view, która nie ma zdefiniowanej ramki. Domyślnie ma ramkę ustawioną na (0, 0, 0, 0), więc jej centrum to (0, 0).

Po ustawieniu label.center = view.center; ustawiasz środek etykiety na (0 - label.width/2, 0 - label.height /2). (-80.5 -10.5; 161 21) w twoim przypadku.

Nie ma potrzeby dodawania nowego UIView, jeśli twój UIViewController już go posiada, po prostu współpracuj z 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; 
} 

Należy również pamiętać, że robi label.center = self.view.centerwill not work properly when rotating to landscape mode.

0

Twój kod będzie działać dobrze, jeśli można umieścić go w viewDiLayoutSubviews zamiast viewDidLoad