Mam niestandardowe przejście między kontrolerami widoku osadzonymi w UINavigationController
, który działa poprawnie, gdy jest zbudowany z systemem iOS 7/8, ale ma nieprawidłowy układ, gdy jest zbudowany na SDK iOS 9.Niestandardowe przejście do animacji wypychania za pomocą NavigationController na iOS 9
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
[transitionContext.containerView addSubview:toViewController.view];
...
Następnie włącza się i wykonuje animację. Problem polega na tym, że zawartość pliku toViewController
, nawet jeśli korzysta z odpowiedniego ograniczenia automatycznego układu strony przewodnika układu, przedstawia zawartość za paskiem nawigacji.
Mimo to działa dobrze na iOS 8 i jeśli wymuszamy przerysowanie (np. Wysłanie aplikacji na tło i przywrócenie jej, pokazanie modalu na wierzchu i odrzucenie go, itp.) Spowoduje cały system automatycznego układania aby przerysować widok, a widok toViewController
przeskoczył w odpowiednie miejsce (jako górny przewodnik układu, x piksele z paska nawigacyjnego zamiast x pikseli od górnej części ekranu urządzenia).
Dodawanie
[self.view setNeedsUpdateConstraints];
[self.view layoutIfNeeded];
działa, jeśli umieścić w viewDidAppear:animated
, ale nie działa na viewDidLoad
lub viewWillAppear:animated
. Nie jest to rozwiązanie jak użytkownicy zobaczyć skoki widok kiedy odrysowywanie dzieje się viewDidAppear:animated
Ratownik, dzięki kolego – beebcon
Właśnie uratowałeś mi wiele godzin. Wielkie dzięki! –