在 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 全屏显示的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中让 UIView 粘在 ViewController 框架的底部
只要 UIView 可见,我如何使 UIView 出现在我的所有应用程序屏幕上 iOS Objective-c
Objective-C - 给定一个 UINib 实例,我如何初始化我的自定义 UIView?