在 Objective-C 中让我的 UIViewController 全屏显示

Posted

技术标签:

【中文标题】在 Objective-C 中让我的 UIViewController 全屏显示【英文标题】:Make my UIViewController fullscreen in Objective-C 【发布时间】:2017-12-04 22:59:02 【问题描述】:

我有一个使用 XIB 文件(不是故事板)的 Objective C 项目。

我有一个 UIViewController 视图,我从播放视频的 AppDelegate.m 文件中午餐。我想让它全屏但标题 顶部的条正在显示,屏幕左侧有一条细白线。

如何让整个视频全屏播放。

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    VideoIntroViewController *videoIntroViewController = [[VideoIntroViewController alloc] initWithNibName:@"VideoIntroViewController" bundle:nil];
    videoIntroViewController.managedObjectContext = self.managedObjectContext;

    self.navigationController = [[UINavigationController alloc] initWithRootViewController:videoIntroViewController];
    self.window.rootViewController = self.navigationController;
    [self.window addSubview:self.navigationController.view];

    [self.window makeKeyAndVisible];

  return YES;

VideoIntroViewController.m

- (void)viewWillAppear:(BOOL)animated
   
    [super viewWillAppear:animated];

    if (!self.navigationController.toolbarHidden)
    
        [self.navigationController setToolbarHidden:YES animated:animated];
    


- (void)viewDidLoad

    [self createVideoPlayer];

    [super viewDidLoad];


- (void)createVideoPlayer

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"welcome_video" ofType:@"mp4"];
    NSURL *url = [NSURL fileURLWithPath:filePath];

    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];

    self.player = [AVPlayer playerWithPlayerItem:playerItem];
    self.player.volume = PLAYER_VOLUME;

    AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
    playerLayer.videoGravity = UIViewContentModeScaleToFill; <-- 'Null passed to a callee that requires a non-null argument'
    playerLayer.frame = self.playerView.layer.bounds;
    [self.playerView.layer addSublayer:playerLayer];

    [self.player play];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayDidEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.player.currentItem];

【问题讨论】:

不要将根视图控制器的视图添加为窗口的子视图。改为设置窗口的rootViewController 属性。如果你不想要导航栏,为什么要使用导航控制器? 【参考方案1】:

在 AppDelegate 本身中隐藏导航栏:

self.navigationController = [[UINavigationController alloc] initWithRootViewController:videoIntroViewController];
self.navigationController.navigationBar.hidden = YES;

【讨论】:

【参考方案2】:

设置导航栏隐藏:

self.navigationController.navigationBar.hidden = true;

【讨论】:

【参考方案3】:

删除以下行,

[self.window addSubview:self.navigationController.view];

你已经设置了self.window的rootViewController。

如果您需要添加子视图(此处不需要)并且您在该视图控制器/视图上使用自动布局,则必须在 storyboard/xib 文件中添加约束或为该视图编写代码。

【讨论】:

以上是关于在 Objective-C 中让我的 UIViewController 全屏显示的主要内容,如果未能解决你的问题,请参考以下文章

IOS/Objective-C:子视图的子视图不显示

在 Swift 中让 UIView 粘在 ViewController 框架的底部

只要 UIView 可见,我如何使 UIView 出现在我的所有应用程序屏幕上 iOS Objective-c

Objective-C - 给定一个 UINib 实例,我如何初始化我的自定义 UIView?

Objective-c:如何使用自动布局向 UIView 添加边框 [关闭]

我的 UIView 有一个 UIButton 作为它的子视图之一,但不响应 Objective-c 中的事件