webentwicklung-frage-antwort-db.com.de

iOS 8 UIPageViewController Anwenden von Einschränkungen nach Übergängen

Meine App verfügt über eine mehrteilige Tutorialansicht, in der Benutzer durch die Informationen blättern können, um mehr über die App zu erfahren. Dies ist sehr ähnlich wie in diesem Tutorial beschrieben . Nachdem ich es für iOS 7 und 8 implementiert habe, vergleiche ich, wie sie funktionieren, und finde Probleme mit letzterem. Ich verwende hier Xcode 6 GM.

Es scheint, dass der UIPageViewController die Ansichten nach Abschluss des Übergangs darstellt. Ich habe die Delegatmethoden überschrieben, um zu sehen, was los war:

- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers
{
   NSLog(@"Frame size before: %@", NSStringFromCGRect([(UIViewController*)pendingViewControllers[0] view].frame));
}

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
   NSLog(@"Frame size after: %@", NSStringFromCGRect([(UIViewController*)previousViewControllers[0] view].frame));
}

Und hier ist eine Beispielausgabe:

Frame size before: {{0, 0}, {600, 600}}
Frame size after: {{0, 0}, {320, 568}}

Dies manifestiert sich wie folgt: Streichen Sie nach links, um in die nächste Ansicht zu ziehen, und beachten Sie eine 32-pt-Leerstelle am unteren Rand der neuen Ansicht. Sobald der Übergang abgeschlossen ist, ruckt er in das richtige Layout.

Ist das vielleicht ein Fehler in iOS 8? Ich habe zu diesem Zeitpunkt keine Ahnung.

64
Aaron Vegh

Ich habe herausgefunden, dass Sie Ihre Einschränkungen auf der Ansicht und nicht auf der Layout-Anleitung Ihres View-Controllers basieren müssen. Dadurch wird sichergestellt, dass der View Controller die Einschränkungen erfüllt, die Sie vor dem Übergang in einen PageViewController festgelegt haben.

das kannst du so machen:

Constraints example

Denken Sie daran, das Häkchen bei "Begrenzung auf Ränder" zu deaktivieren.

112
Darryl Bayliss

Für jeden, der dieses Problem hatte, schien es mir so zu sein, dass ich Ansichten "relativ zum Rand" auslegte (eine neue Funktion in iOS 8).

Anstatt:

enter image description here

Benutzen:

enter image description here

41
dfickling

Ich habe seit ein paar Tagen damit zu kämpfen. 

Ich habe versucht, es zu implementieren, indem ich die Seite ViewController vom Storyboard aus instantiierte. Es kam zu einer definitiven Größenänderung. Überprüfen der Rahmengröße in 

  1. pageViewController: viewControllerAfterViewController
  2. pageViewController: willTransitionToViewControllers
  3. pageViewController: didFinishAnimating: previousViewControllers

Die Frame-Größe würde sich immer zwischen den Aufrufen nach1und3ändern. Manchmal vor2und manchmal danach.

Wenn Sie auch Storyboards verwenden, konnte ich das Problem beheben, indem ich die Elemente der Seitenoberfläche in eine eigene XIB-Datei extrahierte, die Einschränkungen in IB festlegte und dann die Seiten mit einem Aufruf aninitWithNibNameerstellt . 

Keine vollständige Antwort, aber es hat mich dazu gebracht, mich produktiv zu fühlen. Ich hoffe es hilft.

2
widano

Für mich bestand die Lösung darin, die Oberseite des tableView an das Superview anzuheften: Editor -> Pin -> Top Space To SuperView (iOS8)

1

Es ist ein Fehler in iOS 8, aber ich habe eine Problemumgehung gefunden:

Fügen Sie eine leere Ansicht über der Statusleiste in Ihrem Storyboard hinzu. Die Höhe der Ansicht sollte so groß sein wie der y-Wert Ihres Objekts, das verschoben wird.

Image of correct constraints

0
AmiiQo