2012-09-24 10 views
6

En iOS 5 se ejecuta correctamente:error de presentar controlador de vista centrado en el iPad iOS 6

PinRequiredViewController *pinView = [[PinRequiredViewController alloc]initWithNibName:@"PinRequiredView" bundle:nil]; 

      UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:pinView]; 

      // show the navigation controller modally 
      navController.modalPresentationStyle = UIModalPresentationFormSheet; 
      navController.modalInPopover = NO; 
      navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 

      [self presentViewController:navController animated:YES completion:nil]; 

      navController.view.superview.frame = CGRectMake(0, 0, 250, 250); 

      navController.view.superview.center = self.view.window.center; 

pero no funciona bien en iOS 6, la vista no permanece centrada en la pantalla, tanto vertical como horizontal. ¿Alguna solución?

Gracias! :)

+0

Tengo el mismo problema y no puedo resolverlo. Solía ​​funcionar bien antes de iOS 6. –

+0

@ Javi_576 ¿Cuál es exactamente el problema aquí? Las preguntas que dicen "no funcionan" no son una descripción exhaustiva del problema. ¿Estás diciendo que no se presenta en absoluto? –

+1

No, la vista se centra en iOS5 con este código, pero no en iOS6. –

Respuesta

8

Creo que va a trabajar si se quita el estilo UIModalTransitionStyleFlipHorizontal de transición y utiliza uno de los otros estilos de transición en su lugar.

Parece que es un error con UIModalTransitionStyleFlipHorizontal.

+0

¡Gracias, hombres! Es un error porque utilicé otro 'UIModalTransitionStyle' y ¡la ejecución está OK! :) –

1

El problema es que puede establecer el marco de la supervista a lo que desee, pero el origen no se cambiará. Esa es la razón por la cual no se mantiene centrada.

parece que Apple limita a propósito en iOS6

+0

¡Gracias por la respuesta! Supuse que era eso ... –

3

uso de la terminación: en su presentViewController:

[self presentViewController:navController animated:YES completion:^{ 
     navController.view.superview.bounds = CGRectMake(0, 0, 250, 250);}]; 

Esto hará que funcione con UIModalTransitionStyleFlipHorizontal.

+2

Este es un paso en la dirección correcta, pero la animación modal es del tamaño incorrecto hasta que finaliza la animación. El resultado final es discordante. –

+2

En iOS6, navCon.view.superview.bounds = CGRectMake (0, 0, kPopupsWidth, kPopupsHeight) después de presentViewController: animated: completion: solía funcionar, pero ya no en iOS7 (Beta 5). La vista se redimensiona, pero no está centrada ... ¡En la finalización funciona, pero una animación fea como el infierno! –

0

Simplemente hazlo en viewDidAppear en lugar de viewDidLoad. ¡Y estás ordenado!

1

En mi entendimiento con UIModalTransitionStyleFlipHorizontal, la única wayout es mediante la presentación de la primera vista y sin animación, fijando el punto central, después de que en la próxima línea de despedir y de nuevo mostrando con animada: sí. Como a continuación .....

[self presentViewController:navController animated:NO completion:nil]; 

CGPoint centerPoint = CGPointMake([[UIScreen mainScreen] bounds].size.width/2, [[UIScreen mainScreen] bounds].size.height/2); 
navController.view.superview.center = centerPoint; 
[navController dismissModalViewControllerAnimated:NO]; 

navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentViewController:navController animated:YES completion:nil]; 
1

tuve éxito con lo siguiente:

aboutViewController.modalPresentationStyle = UIModalPresentationFormSheet; 
aboutViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 

CGRect aboutSheetFrame = aboutViewController.view.frame; 
[self presentViewController:aboutViewController animated:YES completion:^{ 
     aboutViewController.view.superview.bounds = aboutSheetFrame; 
     }]; 
aboutViewController.view.superview.bounds = aboutSheetFrame; 

El uso de UIModalTransitionStyleFlipHorizontal transición es todavía buggy iOS 6.1 beta 2. aboutSheetFrame es evitar tamaños hardcoding.

0

Para iOS 7 intente esto:

[self.navigationController presentViewController:navigationController animated:YES completion:^{ 
    //Make the modal bigger than normal 
    navigationController.view.superview.bounds = CGRectMake(0, 0, 700, 650); 
}]; 

La animación se verá feo, así que recomiendo añadir una animación para mejorarlo:

[self.navigationController presentViewController:navigationController animated:YES completion:^{ 
    [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ 
     //Make the modal bigger than normal 
     navigationController.view.superview.bounds = CGRectMake(0, 0, 700, 650); 
    } completion:^(BOOL finished) { 
    }]; 
}]; 

Asimismo, recuerda que se necesita para establecer el marco de de la vista de controles de navegación en el viewDidAppear para que el contenido tenga el tamaño correcto.

Cuestiones relacionadas