Пользовательский контроллер и высота панели навигации
Я реализую пользовательский контроллер представления содержания. Дочерние ВК - это контроллеры навигации и полноэкранные. Для выполнения перехода / анимации я использую:
// controller hierarchy setup
parentVC.addChildViewController(targetVC)
currentVC.willMoveToParentViewController(nil)
// position target
targetVC.view.frame = currentVC.view.frame
targetVC.view.autoresizingMask = .FlexibleHeight | .FlexibleWidth
// swap em
parentVC.transitionFromViewController(currentVC, toViewController: targetVC, duration: 0.3, options: .TransitionCrossDissolve, animations: {}) { (finished) -> Void in
// controller hierarchy complete
self.currentVC.removeFromParentViewController()
self.targetVC.didMoveToParentViewController(self.parentVC)
}
Он отлично работает, за исключением того, что панель навигации перекрывает строку состояния до тех пор, пока анимация не будет завершена, после чего она встанет на место с дополнительными 20px по высоте.
Поскольку кадр устанавливается перед анимацией, а анимация не влияет на кадр, я в растерянности... есть идеи?
1 ответ
Я смог получить желаемый эффект, бросив transitionFromViewCon...
и просто используя UIView's animateWithDuration
, Похоже, выяснить, как придерживаться transitionFromViewCon...
было бы идеально, но сейчас я буду сниматься с этим.
// controller hierarchy setup
parentVC.addChildViewController(targetVC)
currentVC.willMoveToParentViewController(nil)
// position target
targetVC.view.alpha = 0
parentVC.view.addSubview(targetVC.view)
// swap em
UIView.animateWithDuration(0.3, animations: { () -> Void in
// crossfade
self.targetVC.view.alpha = 1
self.currentVC.view.alpha = 0
}, { (finished) -> Void in
self.currentVC.view.removeFromSuperview()
// controller hierarchy complete
self.currentVC.removeFromParentViewController()
self.targetVC.didMoveToParentViewController(self.parentVC)
})