自定义控制器包含和导航栏高度
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)
)
【讨论】:
以上是关于自定义控制器包含和导航栏高度的主要内容,如果未能解决你的问题,请参考以下文章