所以,我有一个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()
}
}
我尝试将模态演示文稿样式设置为.OverFullScreen
。它没有帮助。
编辑:
为了清楚说明,请附上一些截图。
当我呈现玩家VC时,它看起来就像那样。如您所见,有两个状态栏相互重叠。
我想要的是只有一个状态栏(在点击后应该隐藏),而不是两个。
答案 0 :(得分:0)
如果你想完全摆脱状态栏:
Height
或者,如果您想要删除视图中的状态栏,只需添加
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
application.statusBarHidden = true
return true
}
在UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: .None)
。
答案 1 :(得分:0)
我找到了解决此问题的方法。不过,这更像是一种黑客的解决方法。
1)首先我在Info.plist中将View controller-based status bar appearance
设置为YES
,因为我想明确这一点(我猜,YES
无论如何都是默认的。)
2)我在视图控制器中添加了一个布尔属性,它以模态方式呈现了上面提到的UITableViewController
(从现在开始我们称之为“Back VC”)。
var statusBarHidden = false {
didSet {
self.setNeedsStatusBarAppearanceUpdate()
}
}
3)我已覆盖prefersStatusBarHidden
,因此它会返回第二步中存储在变量中的内容。
override func prefersStatusBarHidden() -> Bool {
return statusBarHidden
}
4)假设backVC
指向“Back VC”,我在presentViewController
的完成块中添加了一些更改。基本上,我让“Back VC”隐藏其状态栏,因此我们只有AVPlayerViewController
管理的那个。
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 viewWillAppear
。
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if UI_USER_INTERFACE_IDIOM() == .Pad {
backVC.statusBarHidden = false
}
}
它有效,但肯定感觉不对。如果您知道更好的解决方案,请随时分享。