Ios 如何摆脱额外的状态栏?

Ios 如何摆脱额外的状态栏?,ios,swift,uikit,Ios,Swift,Uikit,因此,我有一个UITableViewController,它是以模态的方式呈现的。点击一个单元格将启动一个全屏播放器(AVPlayerViewController)。它与self.presentViewController(…)一起显示 一切正常,只是现在显示了一个额外的状态栏。当您点击播放器视图时,这两个视图中只有一个被隐藏 func play (url: NSURL, time: NSTimeInterval) { let asset = AVURLAsset(URL: url)

因此,我有一个UITableViewController,它是以模态的方式呈现的。点击一个单元格将启动一个全屏播放器(AVPlayerViewController)。它与self.presentViewController(…)一起显示

一切正常,只是现在显示了一个额外的状态栏。当您点击播放器视图时,这两个视图中只有一个被隐藏

func play (url: NSURL, time: NSTimeInterval) {

    let asset = AVURLAsset(URL: url)
    let playerItem = AVPlayerItem(asset: asset)
    let player = AVPlayer(playerItem: playerItem)
    let playerController = AVPlayerViewController()
    playerController.player = player

    playerController.modalPresentationStyle = .OverFullScreen

    presentViewController(playerController, animated: true) {
        player.seekToTime(CMTime(seconds: time, preferredTimescale:
            playerItem.currentTime().timescale))
            player.play()
    }

}
我尝试将模式演示样式设置为
。全屏显示。这没用

编辑:

为了清楚起见,让我附上一些截图

当我介绍玩家VC时,看起来是这样的。如您所见,有两个状态栏彼此重叠

当我点击播放器视图时,其中只有一个消失了。


我想要的是只有一个状态栏(点击后会隐藏),而不是两个。

如果您想完全摆脱状态栏:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
     application.statusBarHidden = true
     return true
}
或者,如果您想摆脱视图中的状态栏,只需添加

UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: .None) 

视图中加载

如果要完全删除状态栏:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
     application.statusBarHidden = true
     return true
}
或者,如果您想摆脱视图中的状态栏,只需添加

UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: .None) 

在您的
视图中,我找到了解决此问题的方法。不过,这更像是一种老套的变通方法

1) 首先,我在Info.plist中将
查看基于控制器的状态栏外观设置为
YES
,因为我想明确这一点(我想,
YES
是默认设置)

2) 我在视图控制器中添加了一个布尔属性,它以模态的方式呈现了上面提到的
UITableViewController
(从现在起我们称之为“backvc”)

3) 我已经重写了
prefersStatusBarHidden
,因此它返回第二步中存储在变量中的任何内容

override func prefersStatusBarHidden() -> Bool {
    return statusBarHidden
}
4) 假设
backVC
指向“backVC”,我对
presentViewController
的完成块添加了一些更改。基本上,我让“Back VC”隐藏了它的状态栏,所以我们只有一个由
avplayervewcontroller
管理的状态栏

presentViewController(playerController, animated: true) {
     if UI_USER_INTERFACE_IDIOM() == .Pad {
        backVC.statusBarHidden = true
     }
     player.seekToTime(CMTime(seconds: time, preferredTimescale:
         playerItem.currentTime().timescale))
         player.play()
}
5) 当球员被解雇时,我们需要恢复我们原来的状态栏。一个好地方是我们的模态VC的
视图将出现

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    if UI_USER_INTERFACE_IDIOM() == .Pad {
        backVC.statusBarHidden = false
    }
}

这是可行的,但肯定感觉不对。如果您知道更好的解决方案,请随意分享。

我找到了解决此问题的方法。不过,这更像是一种老套的变通方法

1) 首先,我在Info.plist中将
查看基于控制器的状态栏外观设置为
YES
,因为我想明确这一点(我想,
YES
是默认设置)

2) 我在视图控制器中添加了一个布尔属性,它以模态的方式呈现了上面提到的
UITableViewController
(从现在起我们称之为“backvc”)

3) 我已经重写了
prefersStatusBarHidden
,因此它返回第二步中存储在变量中的任何内容

override func prefersStatusBarHidden() -> Bool {
    return statusBarHidden
}
4) 假设
backVC
指向“backVC”,我对
presentViewController
的完成块添加了一些更改。基本上,我让“Back VC”隐藏了它的状态栏,所以我们只有一个由
avplayervewcontroller
管理的状态栏

presentViewController(playerController, animated: true) {
     if UI_USER_INTERFACE_IDIOM() == .Pad {
        backVC.statusBarHidden = true
     }
     player.seekToTime(CMTime(seconds: time, preferredTimescale:
         playerItem.currentTime().timescale))
         player.play()
}
5) 当球员被解雇时,我们需要恢复我们原来的状态栏。一个好地方是我们的模态VC的
视图将出现

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    if UI_USER_INTERFACE_IDIOM() == .Pad {
        backVC.statusBarHidden = false
    }
}

这是可行的,但肯定感觉不对。如果您知道更好的解决方案,请随时与我们分享。

恐怕这并不能解决问题。我用一些截图编辑了我的原始帖子。所以你想删除显示时钟等的状态栏,并保留显示视频进度的状态栏吗?不是真的。我想删除带有时钟等的第二个状态栏。正如您从第二个屏幕截图中看到的,一个在点击时被隐藏,另一个(从显示的电池指示灯可以看出)仍然存在。在第二个屏幕截图上,您不能执行
UIApplication.sharedApplication().setStatusBarHidden(true,带动画:.None)
setStatusBarHidden
在iOS 9中不推荐使用。作为替代方案,UIViewController上有一个方法可以被覆盖“prefersStatusBarHidden->Bool”。我试过了,但没什么改变。恐怕这不能解决问题。我用一些截图编辑了我的原始帖子。所以你想删除显示时钟等的状态栏,并保留显示视频进度的状态栏吗?不是真的。我想删除带有时钟等的第二个状态栏。正如您从第二个屏幕截图中看到的,一个在点击时被隐藏,另一个(从显示的电池指示灯可以看出)仍然存在。在第二个屏幕截图上,您不能执行
UIApplication.sharedApplication().setStatusBarHidden(true,带动画:.None)
setStatusBarHidden
在iOS 9中不推荐使用。作为替代方案,UIViewController上有一个方法可以被覆盖“prefersStatusBarHidden->Bool”。我试过了,但没什么改变。