自定义控制器遏制和导航栏高度

时间:2014-12-01 02:29:23

标签: ios swift cocoa-touch uiviewcontroller uikit

我正在实现自定义包含视图控制器。子VC是导航控制器,全屏。要执行我正在使用的转换/动画:

// 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 个答案:

答案 0 :(得分:2)

通过放弃transitionFromViewCon...并使用UIView的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)
    })