使用自定义视图控制器转换,我在哪里可以隐藏状态栏?

Posted

技术标签:

【中文标题】使用自定义视图控制器转换,我在哪里可以隐藏状态栏?【英文标题】:With custom view controller transitions, where do I get to hide the status bar? 【发布时间】:2014-11-24 01:30:28 【问题描述】:

示例项目: http://cl.ly/1C0N0E0f3n2P

我正在尝试在 ios 8 中创建到视图控制器的自定义转换。我正在使用 UIPresentationController 以及实现 UIViewControllerAnimatedTransitioningNSObject 子类,基本上遵循 this tutorial。

我还想在视图控制器出现时隐藏状态栏,但我不知道在这个范例中我应该在哪里执行此操作。

每当我尝试在UIPresentationController 子类中调用presentingViewController 上的方法,或者使用NSObject 子类中的键时,我总是会崩溃,这让我相信我不应该调用方法关于这些?

示例示例:

class CustomPresentationController: UIPresentationController 
    override func presentationTransitionWillBegin() 
        // Following line causes crash
        (presentingViewController as ViewController).testFunction()        

        let darkOverlayView = UIView(frame: presentingViewController.view.bounds)
        darkOverlayView.backgroundColor = UIColor(white: 0.0, alpha: 0.5)

        containerView.addSubview(darkOverlayView)
    

那么我到底在哪里隐藏状态栏?我不想在调用presentViewController 的同时调用它,因为每次出现时我都想隐藏状态栏,因此为了 DRY 原则,它应该包含在动画本身中。

【问题讨论】:

能否请您展示您实际尝试的代码以及崩溃时的堆栈跟踪? 我会上传一个样本,秒。 @AaronBrager 添加了示例。 【参考方案1】:

以下代码将修复崩溃。

let controller = presentingViewController as UINavigationController
let ctl = controller.topViewController as ViewController
ctl.testFunction()

【讨论】:

以上是关于使用自定义视图控制器转换,我在哪里可以隐藏状态栏?的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController 在 iOS7 中使用自定义转换委托隐藏导航栏

在 AppDelegate 中实现后隐藏自定义状态栏视图

同时状态栏隐藏和视图转换

动画状态栏以及segue中的自定义转换

UIStoryBoardSegue 过渡 - 状态栏问题

检查使用模态视图控制器隐藏的 iOS 状态栏