我正在尝试创建一个透明的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
,左侧的视图为loginVC
。 loginNavVc
小于loginVC
。
但是在loginNavVc
viewDidLoad
中我打印了所选视图,它的帧是(0 0; 320 568)但是当我在视图层次结构中打印它的描述时(内存中的地址相同),它的帧是(0 64; 320 504)。为什么会这样?如何使其全屏(不像游戏一样全屏,状态栏应该仍然可见)?
答案 0 :(得分:1)
在展示导航控制器之前添加此项。
[self.loginNavVC.navigationBar setBackgroundImage:[UIImage new]
forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];
self. loginNavVC.navigationBar.translucent = YES;