为什么UINavigationController根控制器的视图比nav控制器小

时间:2016-05-04 11:39:56

标签: ios objective-c uinavigationcontroller uinavigationbar

我正在尝试创建一个透明的UINavigationBar,这就是我所做的:

首先,我的代码中有一个navVC和一般VC作为根VC。

SNLoginViewController *loginVC = [[SNLoginViewController alloc] init];
SNLoginNavController *loginNavVC = [[SNLoginNavController alloc] initWithRootViewController:loginVC];
[self presentViewController:loginNavVC animated:YES completion:nil];

我没有覆盖init的{​​{1}}方法。

以下是SNLoginViewController的实施:

initWithRootViewController:

使用这些代码(- (instancetype)initWithRootViewController:(UIViewController *)rootViewController { self = [super initWithRootViewController:rootViewController]; if (self) { UIImage *bgImage = [UIImage imageNamed:@"bg"]; UIImageView *bgImageView = [[UIImageView alloc] initWithImage:bgImage]; bgImageView.frame = [UIScreen mainScreen].bounds; [self.view insertSubview:bgImageView atIndex:0]; [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"transparent"]//transparent is a transparent png forBarMetrics:UIBarMetricsCompact]; self.navigationBar.shadowImage = [UIImage imageNamed:@"transparent"]; self.navigationBar.barStyle = UIBarStyleBlackTranslucent; [self.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName: [UIFont systemFontOfSize:18]}]; self.navigationBar.clipsToBounds = YES; } return self; } )我应该能够使导航栏透明但出错了。主要问题是setBackgroundImage:forBarMetrics:的框架在某种程度上小于loginVC

http://static.zybuluo.com/zhengbuqian/bcdt5ht5nsv69izgasqzdyhz/Snip20160504_1.png

在上图中,所选视图为loginNavVC,左侧的视图为loginVCloginNavVc小于loginVC

但是在loginNavVc viewDidLoad中我打印了所选视图,它的帧是(0 0; 320 568)但是当我在视图层次结构中打印它的描述时(内存中的地址相同),它的帧是(0 64; 320 504)。为什么会这样?如何使其全屏(不像游戏一样全屏,状态栏应该仍然可见)?

1 个答案:

答案 0 :(得分:1)

在展示导航控制器之前添加此项。

[self.loginNavVC.navigationBar setBackgroundImage:[UIImage new]
                     forBarMetrics:UIBarMetricsDefault]; 

self.navigationController.navigationBar.shadowImage = [UIImage new];

self. loginNavVC.navigationBar.translucent = YES;