Ich gehe zu UIPresentationController
basierte Präsentationen für meine View-Controller, aber habe ein wenig Verwirrung mit der API gerissen.Adaptive UIPresentationController Basierend auf Ansichtsgröße
Ich habe eine benutzerdefinierte Sidebar Stil Ansicht Controller-Präsentation (ähnlich der LookInside
WWDC 2014 Demo-Code).
Diese Klasse Cluster (UIPresentationController
, UIViewControllerTransitioningDelegate
und UIViewControllerAnimatedTransitioning
) einen View-Controller als eine Seitenleiste von der Kante des Bildschirms auf Liniengrößenklasse Ansichten, und stellt die gleiche Ansicht Controller als Vollbild auf kompakte Größe Klassenansichten.
Das Testen auf dem resizierbaren iPad-Ziel zeigt das korrekte Verhalten: Ich setze die horizontale Größenklasse auf "Kompakt" und mein View-Controller wechselt von Sidebar auf Vollbild.
Allerdings möchte ich mehr Granularität. Ich möchte die Sidebar-ähnliche View-Controller-Präsentation auf iPhone 6 und 6+ verwenden, wenn sich das Gerät im Querformat befindet, und die Vollbild-Präsentation für alle iPhones im Hochformat verwenden.
So in meiner Methode
- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
implementiert ich eine gewisse Logik zu erkennen, ob die Sidebar zu viel des Bildschirms einnehmen wird, sagen wir, ich verwenden Sie die folgende Bedingung:
//If my sidebar is going to occupy more than half the new width of the view...
if(self.sidebarTransitionController.width > size.width/2.0)
{
//Override the presentation controller's trait collection with Compact horizontal size class
sidebarPresentationController.overrideTraitCollection = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact];
}
else
{
//Otherwise override the trait collection with Regular
sidebarPresentationController.overrideTraitCollection = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];
}
aber dies tut nichts. Die Dokumentation für UIPresentationController.overrideTraitCollection
Zustände:
Mit dieser Eigenschaft alle Merkmale angeben, die auf die dargestellten und präsentiert View-Controller anwenden möchten. Die Eigenschaften, die Sie angeben, überschreiben alle vorhandenen Eigenschaften, die derzeit für die View-Controller gelten. Der Standardwert dieser Eigenschaft ist null.
Das Zuweisen eines neuen Werts zu dieser Eigenschaft bewirkt, dass der Präsentationscontroller in den neuen Satz von Merkmalen übergeht, was zu Animationen für die dargestellte Oberfläche führen kann.
Das Zuweisen des neuen Werts zum Präsentationscontroller führt nicht dazu, dass sich meine dargestellte Schnittstelle in irgendeiner Weise ändert. (Auch wenn ich die overrideTraitCollection
zuweisen, wenn die UIPresentationController
aus dem UIViewControllerTransitioningDelegate
Objekt erstellt wird.)
Was fehlt mir? Ist es möglich, eine adaptive Präsentation mit UIPresentationController
auf einer feineren Ebene durchzuführen?