2012-07-20 15 views
5

RISOLTO: controllare sotto per la soluzione al mio problema.Come centrare UIActivityIndicator?

enter image description here

Hey SO,

Ho problemi a centrare l'UIActivityIndicator nel centro della vista. Come puoi vedere qui, è un po 'più in basso verticalmente di quanto dovrebbe essere. Quello che ho è un UIScrollView che in seguito aggiunge una sottoview UIImage. Prima di caricare UIImage, ho questo UIActivityIndicator per mostrare che l'immagine si sta caricando.

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 
    self.scrollView.backgroundColor = [UIColor blackColor]; 
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc]  initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
    spinner.center = self.view.center; 

    [spinner startAnimating]; 
    [self.view addSubview:spinner]; 

Qualche idea su come ottenere il centro CGPoint e impostare UIActivityIndicator lì? Non sono sicuro del perché self.view.center non funzioni.

Grazie in anticipo.

MODIFICA: ho dovuto tenere conto dell'altezza della barra di navigazione e della barra delle schede. Il codice ho dovuto aggiungere era:

float navigationBarHeight = [[self.navigationController navigationBar] frame].size.height; 
float tabBarHeight = [[[super tabBarController] tabBar] frame].size.height; 
spinner.center = CGPointMake(self.view.frame.size.width/2.0, (self.view.frame.size.height - navigationBarHeight - tabBarHeight)/2.0); 

enter image description here

risposta

6

Due problemi:

  1. Innanzitutto, self.view.center è il centro del telaio della vista corrente su esso è telaio del genitore. Se vuoi il centro della vista corrente, vuoi CGPointMake(self.view.frame.size.width/2.0, self.view.frame.size.height/2.0);

  2. In secondo luogo, la tua vista corrente non include la barra di navigazione, quindi la stai centrando nello spazio dello schermo sotto la barra di navigazione. Anche questo lo farà sembrare più basso.

+0

Grazie @Robert Ryan! Spegnendo i tuoi due suggerimenti sono riuscito a farlo funzionare correttamente. Ho dovuto trovare l'altezza sia della barra di navigazione che della barra delle schede per ottenere l'altezza corretta. Ho aggiunto il codice al mio post originale. – kkSlider

2

Non sono sicuro di quello che sta esattamente succedendo, ma forse il tuo UIScrollView è più alto rispetto allo schermo? Potresti provare a stampare la dimensione del tuo UIView per determinare se è presente nei limiti dello schermo. Forse UIActivityIndicator si trova al centro di UIView (non al centro dello schermo).

+0

Non sarebbe il centro del limite del UIView essere lo stesso come il centro dello schermo? – kkSlider

+0

NSLog mi ha dato che sia self.view che CGRect di self.scrollView è {{0, 0}, {320, 460}}. E self.view.center stampa correttamente (160, 230).Non so cosa c'è di sbagliato qui. – kkSlider

3

utilizzare spinner.center = self.scrollView.center; invece

provare questo

spinner.center = CGPointMake (CGRectGetMidX (self.bounds), CGRectGetMidY (self.bounds));

+0

Grazie, ma ho già provato questo e ottenuto gli stessi risultati. – kkSlider

4

SWIFT

ho avuto lo stesso problema a causa di una barra di navigazione e una barra delle schede. Per risolvere, inserire il seguente codice nel tuo loadview() o dovunque si chiama il vostro indicatore di attività per iniziare l'animazione:

let navigationBarHeight = self.navigationController?.navigationBar.frame.height 
let tabBarHeight = super.tabBarController!.tabBar.frame.height 
YourActivityIndicator.center = CGPointMake(self.view.frame.size.width/2.0, (self.view.frame.size.height - navigationBarHeight! - tabBarHeight)/2.0) 
0

Set center in viewDidLayoutSubviews.

- (void) viewDidLayoutSubviews { 

self.myActivityIndicator.center = self.view.center;  

}