【问题标题】:Presenting AVPlayerViewController StatusBar Makes UI Jump呈现 AVPlayerViewController 状态栏使 UI 跳转
【发布时间】:2016-08-23 10:23:08
【问题描述】:

按下按钮时,我正在展示一个 AVPlayerViewController:

func playVideoPressed(sender: UIButton){
  let videoURL = NSURL(string: "someUrl")
  let player = AVPlayer(URL: videoURL!)
  let playerViewController = AVPlayerViewController()
  playerViewController.player = player
  self.presentViewController(playerViewController, animated: true) {
    playerViewController.player!.play()
  }
}

这个 AVPlayerViewController 的状态栏让当前 View Controller 的 UI 跳转。我可以在这个“presentViewController 调用”中隐藏状态栏吗?

我试过包括

playerViewController.prefersStatusBarHidden()

但播放器继续显示状态栏。

谢谢

【问题讨论】:

  • 感谢@NSNoob,但它适用于我当前的 ViewController(按下按钮呈现的那个。

标签: swift viewcontroller xcode-storyboard avplayerviewcontroller


【解决方案1】:

这是 Objective-C 中的版本:

@interface MyAVPlayerViewController: AVPlayerViewController
@property (nonatomic) BOOL presenting;
@end

@implementation MyAVPlayerViewController

- (instancetype)init {
    self = [super init];
    if (self) {
        self.presenting = YES;
    }
    return self;
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    self.presenting = NO;
    [self setNeedsStatusBarAppearanceUpdate];
}

- (BOOL)prefersStatusBarHidden {
    return !self.presenting && [super prefersStatusBarHidden];
}

@end

【讨论】:

    【解决方案2】:

    我最终只是创建了一个新的 AVPlayerViewController,我从按钮按下开始,并在该控制器中添加了代码:

    override func prefersStatusBarHidden() -> Bool {
        return true
    }
    

    考虑到我只是在观看视频,似乎需要更多代码,但它运行流畅。

    【讨论】:

    • 您是说您将 avplayerviewcontroller 子类化并添加了此方法,还是将其添加到显示 avplayerviewcontroller 的视图控制器中?
    【解决方案3】:

    我的解决方案:

    class MyAVPlayerViewController: AVPlayerViewController {
    var presenting: Bool = true
    
    override var prefersStatusBarHidden: Bool {
        if presenting {
            return false
        } else {
            return super.prefersStatusBarHidden
        }
    }
    
    override var childViewControllerForStatusBarHidden: UIViewController? {
        if presenting {
            return nil
        } else {
            return super.childViewControllerForStatusBarHidden
        }
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        presenting = false
        setNeedsStatusBarAppearanceUpdate()
    }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-03-01
      • 1970-01-01
      • 2018-03-14
      • 1970-01-01
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多