Version courte:
J'ai un problème avec mise en page automatique haut de page lorsqu'il est utilisé conjointement avec la coutume de transition et d' UINavigationController
dans iOS7. Plus précisément, la contrainte entre le haut guide de présentation et l'affichage de texte n'est pas mis à l'honneur. Quelqu'un a rencontré ce problème?
Version longue:
J'ai une scène qui a définir sans ambiguïté des contraintes (haut, bas, gauche et droite) qui rend une vue comme ça:
Mais quand je l'utilise avec une transition personnalisée sur la manette de navigation, en haut de contrainte pour le haut de la page semble éteint et le rendu est comme suit, comme si la page était en haut de l'écran, plutôt qu'en bas de la manette de navigation:
Il semble que le "haut de page" avec la manette de navigation est de se confondre en employant la transition personnalisée. Le reste de l'contraintes sont appliquées correctement. Et si j'ai faites pivoter l'appareil et faites-le pivoter de nouveau, tout est soudain rendu correctement, de sorte qu'il ne semble pas être n'est pas une question que les contraintes ne sont pas définis correctement. De même, lorsque j'éteins mon custom de transition, les points de vue s'afficher correctement.
Ayant dit que, _autolayoutTrace
est signalé que le UILayoutGuide
objets souffrent d' AMBIGUOUS LAYOUT
, quand je le lance:
(lldb) po [[UIWindow keyWindow] _autolayoutTrace]
Mais ces repères de mise en page sont toujours signalés comme ambigu chaque fois que je les regarde, même si j'ai veillé à ce qu'il ne manque aucun des contraintes (j'ai fait le coutumier de la sélection de la vue-contrôleur, et en choisissant "Ajouter manquant contraintes de vue-contrôleur" ou en sélectionnant toutes les commandes et faire de même pour eux).
En termes de la façon dont justement je suis en train de faire la transition, j'ai spécifié un objet conforme à l' UIViewControllerAnimatedTransitioning
dans la animationControllerForOperation
méthode:
- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
animationControllerForOperation:(UINavigationControllerOperation)operation
fromViewController:(UIViewController*)fromVC
toViewController:(UIViewController*)toVC
{
if (operation == UINavigationControllerOperationPush)
return [[PushAnimator alloc] init];
return nil;
}
Et
@implementation PushAnimator
- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext
{
return 0.5;
}
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
UIViewController* toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
[[transitionContext containerView] addSubview:toViewController.view];
CGFloat width = fromViewController.view.frame.size.width;
toViewController.view.transform = CGAffineTransformMakeTranslation(width, 0);
[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
fromViewController.view.transform = CGAffineTransformMakeTranslation(-width / 2.0, 0);
toViewController.view.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
fromViewController.view.transform = CGAffineTransformIdentity;
[transitionContext completeTransition:![transitionContext transitionWasCancelled]];
}];
}
@end
J'ai aussi fait une version de ce qui précède, le réglage de l' frame
de la vue plutôt que de l' transform
, avec le même résultat.
J'ai aussi essayé manuellement, assurez-vous que les contraintes sont ré-appliqué en appelant layoutIfNeeded
. J'ai aussi essayé de setNeedsUpdateConstraints
, setNeedsLayout
, etc.
Bas de la ligne, quelqu'un a réussi à marier transition personnalisée de la manette de navigation avec des contraintes d'utilisation haut de page?