2012-07-20 11 views
5

SOLUCIONADO: Marque a continuación la solución a mi problema.¿Cómo centrar UIActivityIndicator?

enter image description here

Hey SO,

Tengo problemas para centrar el UIActivityIndicator en el centro de la vista. Como puede ver aquí, está un poco más abajo verticalmente de lo que debería ser. Lo que tengo es un UIScrollView que luego agrega una subvista de UIImage. Sin embargo, antes de que se cargue el UIImage, tengo este UIActivityIndicator para mostrar que la imagen se está cargando.

- (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]; 

¿Alguna idea sobre cómo podría obtener el centro CGPoint y configurar el UIActivityIndicator allí? No estoy seguro de por qué self.view.center no funciona.

Gracias de antemano.

EDITAR: tuve que dar cuenta de la altura de la barra de navegación y la barra de pestañas. El código que he tenido que añadir 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

Respuesta

6

dos problemas:

  1. En primer lugar, self.view.center es el centro del marco de la vista actual en él es el marco de los padres. Si quiere el centro de la vista actual, quiere CGPointMake(self.view.frame.size.width/2.0, self.view.frame.size.height/2.0);

  2. En segundo lugar, su vista actual no incluye la barra de navegación, por lo que la está centrando en el espacio de la pantalla debajo de la barra de navegación. Eso también lo hará lucir más bajo.

+0

¡Gracias @Robert Ryan! Al desviar tus dos sugerencias, pude hacerlo funcionar correctamente. Tuve que encontrar la altura de la barra de navegación y la barra de pestañas para obtener la altura correcta. Agregué el código a mi publicación original. – kkSlider

2

No estoy seguro exactamente lo que está pasando, pero tal vez su UIScrollView es más alta que la pantalla? Podría intentar imprimir el tamaño de su UIView para determinar si está dentro de los límites de la pantalla. Quizás UIActivityIndicator está en el centro de UIView (no en el centro de la pantalla).

+0

No sería el centro de los límites de la UIView ser el mismo que el centro de la pantalla? – kkSlider

+0

NSLog me dio que tanto self.view como self.scrollView's CGRect son {{0, 0}, {320, 460}}. Y self.view.center imprime correctamente (160, 230).No estoy seguro de lo que está mal aquí. – kkSlider

3

use spinner.center = self.scrollView.center; en lugar

probar este

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

+0

Gracias, pero ya probé esto y obtuve los mismos resultados. – kkSlider

4

SWIFT

que estaba teniendo el mismo problema debido a una barra de navegación y una barra de pestañas. Para fijar, colocar el siguiente código en su loadView() o donde quiera que llame a su indicador de actividad para comenzar la animación:

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

centro situado en viewDidLayoutSubviews.

- (void) viewDidLayoutSubviews { 

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

}