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

Posted

技术标签:

【中文标题】自定义控制器包含和导航栏高度【英文标题】:Custom controller containment and navigation bar height 【发布时间】:2014-12-01 02:29:23 【问题描述】:

我正在实现一个自定义的包含视图控制器。子 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】:

我能够通过放弃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)
    )

【讨论】:

以上是关于自定义控制器包含和导航栏高度的主要内容,如果未能解决你的问题,请参考以下文章

iOS 11.2自定义导航栏无限循环

自定义 segue 和导航控制器动画故障

导航栏高度和自定义按钮

为不同的屏幕使用自定义导航栏?

如何让自定义导航控制器为每个故事板提供相同的自定义导航栏按钮

如何将自定义导航栏链接到导航控制器?