Ios 否";“完成”;AVPlayerViewController上的按钮

Ios 否";“完成”;AVPlayerViewController上的按钮,ios,Ios,我正在使用avplayervewcontroller来流式传输内容。播放工作正常,但我没有看到“完成”按钮来关闭视图 下面是我如何设置和显示视图控制器 NSURL* url = [content localSessionUrl]; AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc] init]; playerViewController.player = [AVPlayer playerWi

我正在使用avplayervewcontroller来流式传输内容。播放工作正常,但我没有看到“完成”按钮来关闭视图

下面是我如何设置和显示视图控制器

NSURL* url = [content localSessionUrl];
AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc] init];
playerViewController.player = [AVPlayer playerWithURL:url];
[self.navigationController pushViewController:playerViewController animated:YES];
[self.navigationController setNavigationBarHidden:YES];
是因为我在导航控制器上按它吗?

是的,“完成”按钮作为模式演示样式的取消按钮。如果要将AVPlayerViewController推送到导航堆栈上,则需要自己处理弹出操作。

不要推或添加子视图,而是尝试显示视图。“完成”按钮将自动显示。下面是代码片段

-(void)playVideoWithUrl:(NSURL *)url{
    AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc]init];
    playerViewController.player = [[AVPlayer alloc]initWithURL:url];
    [self presentViewController:playerViewController animated:YES completion:nil];
    playerViewController.view.frame = self.view.frame;
    [playerViewController.player play];
}

我认为问题在于,当您将avplayervewcontroller视图添加到占据整个屏幕的屏幕上的a视图时,它会将其视为已经处于全屏模式。诀窍是将其添加到占据屏幕较小部分的视图中

最初我是这样做的:

// Setup an AVPlayerViewController
self.avPlayerViewController = [[AVPlayerViewController alloc] init];
if ([self.avPlayerViewController respondsToSelector:@selector(allowsPictureInPicturePlayback)]) {
    self.avPlayerViewController.allowsPictureInPicturePlayback = NO;
}

// Attach the Active Cloack AVPlayer to the AVPlayerViewController
AVPlayer *player = self.avPlayer;
self.avPlayerViewController.player = player;
self.avPlayerViewController.view.frame = self.view.bounds;
[self.view addSubview:self.avPlayerViewController.view];

// Setup the Parent Child relationshipo
[self addChildViewController:self.avPlayerViewController];
[self.avPlayerViewController willMoveToParentViewController:self];
[self.avPlayerViewController didMoveToParentViewController:self];
然而,我也遇到了同样的问题,我的播放器没有“完成”按钮,所以我无法退出视频

然后,我修改了我的xib/故事板,在顶部添加了一个带有“完成”按钮的UINavigationBar,并在下面添加了一个UIView作为容器。然后,我将avplayervewcontroller添加到这个容器视图中,控件神奇地变为非全屏模式。我有一个全屏按钮,让播放器进入全屏模式


然而,我随后不得不创建代码来自动隐藏导航栏,并在导航栏中添加一个完成按钮和一个标题等。

对于iPad,我使用UIModalPresentationFormSheet显示和完成按钮wwas缺失。。。所以我用了我自己的按钮:

        AVPlayerViewController *playerViewController =
 [[AVPlayerViewController alloc] init]; 

//...

        UIViewController *controllerToPresent = playerViewController;

        if (IS_IPAD){
            SBNavigationController *nc = [[SBNavigationController alloc] initWithRootViewController:playerViewController];
            [playerViewController.navigationItem setLeftBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Done", @"") style:UIBarButtonItemStylePlain target:self action:@selector(cancelPlayingPressed)]];
            controllerToPresent = nc;
        } 

我也遇到了这个问题。我把序列从“按”切换到“模式”,关闭按钮出现了


您是如何处理的??定制按钮@dev@Fyza,而不是pushViewController,我调用了presentViewController,如下pck456所述。请为我完成这项工作!做得很好。。。!!Swift 3更新:使用
self.showDetailViewController
而不是
self.presentViewController