2012-09-24 14 views
6

In iOS 5 è eseguito correttamente:Errore presentare controller di vista centrato in 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; 

Ma non funziona bene in iOS6, la vista non rimane al centro dello schermo, verticale e orizzontale. Qualche soluzione?

Grazie !! :)

+0

Ho lo stesso problema e non posso risolverlo. Utilizzato per funzionare bene prima di iOS 6. –

+0

@ Javi_576 Qual è esattamente il problema qui? Le domande che dicono "non funziona" non sono una descrizione approfondita del problema. Stai dicendo che non si presenta affatto? –

+1

No, la vista è centrata in iOS5 con questo codice, ma non in iOS6. –

risposta

8

penso che funzionerà se si rimuove lo stile UIModalTransitionStyleFlipHorizontal di transizione e utilizzare uno degli altri stili di transizione, invece.

Sembra che si tratti di un bug con UIModalTransitionStyleFlipHorizontal.

+0

Grazie uomini! È un bug perché ho usato un altro 'UIModalTransitionStyle' e ho eseguito OK! :) –

1

Il problema è che è possibile impostare la cornice del superview in qualsiasi modo, ma l'origine non verrà modificata. Questo è il motivo per cui non rimane centrato.

Sembra che Apple ha limitato di proposito in iOS6

+0

Grazie per la risposta! Supponevo che fosse ... –

3

Usa il completamento: nella vostra presentViewController:

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

Ciò farlo funzionare con UIModalTransitionStyleFlipHorizontal.

+2

Questo è un passo nella giusta direzione, ma l'animazione modale è la dimensione errata fino al termine dell'animazione. Il risultato finale è stridente. –

+2

Su iOS6 navCon.view.superview.bounds = CGRectMake (0, 0, kPopupsWidth, kPopupsHeight) dopo presentViewController: animated: completion: usato per funzionare, ma non più su iOS7 (Beta 5). La vista è ridimensionata, ma non centrata ... A lavori ultimati, ma un'animazione brutta come l'inferno! –

0

Basta farlo in viewDidAppear invece di viewDidLoad. E tu sei in ordine!

1

Nella mia comprensione con UIModalTransitionStyleFlipHorizontal, l'unico wayout è in primo luogo presentando vista senza animazione, impostare il punto centrale, dopo che nel prossimo linea che respinge e che mostrare di nuovo con animazione: sì. Come sotto .....

[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

sono riuscito con il seguente:

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; 

L'utilizzo di UIModalTransitionStyleFlipHorizontal transizione è ancora buggy su iOS 6.1 beta 2. aboutSheetFrame è quello di evitare i formati brutalmente.

0

Per iOS 7 provate questo:

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

L'animazione sarà brutto quindi vi consiglio di aggiungere un'animazione per migliorarlo:

[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) { 
    }]; 
}]; 

anche ricordare che è necessario impostare il fotogramma della vista NavigationControllers nella viewDidAppear per il contenuto della dimensione corretta.

Problemi correlati