2012-09-24 4 views
6

In iOS 5 läuft es richtig:Fehler präsentieren Controller Ansicht zentriert 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; 

Aber nicht in iOS6 funktioniert gut, der Blick bleibt nicht auf dem Bildschirm zentriert, Portrait und Landschaft. Irgendwelche Lösungen?

Danke !! :)

+0

Ich habe das gleiche Problem und kann es nicht lösen. Wurde verwendet, um vor iOS 6 zu funktionieren. –

+0

@ Javi_576 Was genau ist das Problem hier? Fragen, die "nicht funktionieren" sagen, sind keine gründliche Beschreibung des Problems. Sagst du, dass es überhaupt nicht vorkommt? –

+1

Nein, die Ansicht ist in iOS5 mit diesem Code zentriert, aber nicht in iOS6. –

Antwort

8

Ich denke, es wird funktionieren, wenn Sie den Stil UIModalTransitionStyleFlipHorizontal Übergang entfernen und stattdessen eine der anderen Übergang Stile verwenden.

Scheint wie es ist ein Fehler mit UIModalTransitionStyleFlipHorizontal.

+0

Danke Leute! Es ist ein Fehler, weil ich einen anderen 'UIModalTransitionStyle' verwendet habe und OK ausgeführt habe! :) –

1

Das Problem ist, dass Sie den Rahmen der Superview auf was auch immer Sie wollen, aber der Ursprung wird nicht geändert werden. Das ist der Grund, warum es nicht zentriert bleibt.

Es sieht aus wie Apple dies absichtlich in iOS6 beschränkt

+0

Danke für die Antwort! Ich vermutete, das war es ... –

3

Mit dem Abschluss: in Ihre presentViewController:

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

Dies wird es mit UIModalTransitionStyleFlipHorizontal arbeiten zu lassen.

+2

Dies ist ein Schritt in die richtige Richtung, aber die modale Animation ist die falsche Größe, bis die Animation abgeschlossen ist. Das Endergebnis ist erschütternd. –

+2

Auf iOS6 die navCon.view.superview.bounds = CGRectMake (0, 0, kPopupsWidth, kPopupsHeight) nach presentViewController: animated: completion: verwendet, um zu arbeiten, aber nicht mehr auf iOS7 (Beta 5). Die Ansicht ist in der Größe verändert, aber nicht zentriert ... Nach der Fertigstellung funktioniert, aber eine hässliche Animation! –

0

Tun Sie es einfach in ViewDidAppear statt ViewDidLoad. Und du bist sortiert!

1

In meinem Verständnis mit UIModalTransitionStyleFlipHorizontal, ist die einzige wayout durch den ersten Blick ohne Animation präsentiert, die Mittelpunkteinstellung, danach in sie entlassen nächste Zeile und als es wieder mit animierten zeigt: ja. Wie unten .....

[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

gelang es mir, mit dem folgenden:

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; 

Verwendung von UIModalTransitionStyleFlipHorizontal Übergang Buggy ist immer noch auf ios 6.1 Beta 2. aboutSheetFrame sind Größen zu vermeiden zu.

0

Für iOS 7 versuchen Sie dies:

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

Die Animation hässlich aussehen wird, so würde ich das Hinzufügen einer Animation empfehlen, es zu verbessern:

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

Denken Sie auch daran, dass Sie den Rahmen festlegen müssen der navigationControllers-Ansicht im viewDidAppear, damit der Inhalt die richtige Größe hat.

Verwandte Themen