Пользовательский контроллер и высота панели навигации

Я реализую пользовательский контроллер представления содержания. Дочерние ВК - это контроллеры навигации и полноэкранные. Для выполнения перехода / анимации я использую:

// 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)
    })
Другие вопросы по тегам