2017-06-04 54 views
5

Mam kontroler widoku kontenera i kontrolki podrzędne (podobne do UITabViewController). Podczas przechodzenia pomiędzy widokiem z jednego kontrolera widoku dziecko i widokiem innego dziecka widok kontrolera używam:Zmiana przejścia SubView po zmianie stanu

let oldView = // get reference to old view 
let newView = // get reference to new view 
UIView.transition(from: oldView!, to: newView!, duration: 0.3, 
        options: .transitionCrossDissolve, completion: nil) 

Problem tutaj jest to, że zmiana nazwy newView dzieje się po zakończeniu animacji przejścia, co wygląda nieestetycznie.

To złe zachowanie występuje tylko wtedy, gdy nowy kontroler widoku podrzędnego jest ładowany po raz pierwszy. Wygląda na to, że metoda viewDidLayoutSubviews jest wywoływana tylko po przejściu.

Jak zmienić rozmiar newView PRZED przejściem, a nie po.

Dzięki Wcześniej.

+0

Przejście sama działa dobrze z Auto Layout. Właśnie to przetestowałem. Musisz pokazać więcej kodu - zwłaszcza kod, w którym dodajesz i konfigurujesz kontrolki widoku podrzędnego. – Mischa

+0

Jak zmienić rozmiar (nowego) widoku kontrolera widoku podrzędnego, aby dopasować go do rozmiaru kontenera? – Mischa

+0

Czy próbowałeś przesłonić 'func viewWillTransition (na rozmiar: CGSize, z koordynatorem: UIViewControllerTransitionCoordinator)' i dodać przejście wewnątrz niego? –

Odpowiedz

2

w ViewController ręcznym func viewWillTransition więc to będzie coś takiego

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 
    let oldView = // get reference to old view 
let newView = // get reference to new view 
UIView.transition(from: oldView!, to: newView!, duration: 0.3, 
        options: .transitionCrossDissolve, completion: nil) 

} 
+1

nie zapomnij, że ta metoda zostanie również wywołana, jeśli Ekran zostanie obrócony w tryb poziomy lub pionowy. –

+0

dzięki za ostrzeżenie, powinienem był o tym wspomnieć. –