这真的很奇怪,我似乎无法解释这一点。花了我几个小时才意识到只有当我在ViewController viewDidLoad中将我的self.view添加UIImageView作为子视图时,我才可以设置导航栏的色调颜色。如果我在init方法中添加UIImageView - 色调颜色对我的导航栏没有任何作用。
因此...
在这种情况下,我的导航栏获得了色调颜色:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
//NAV BAR COLOR
self.navigationController.navigationBar.tintColor = [UIColor blueColor];
//ADDING BACKGROUND IMAGE
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
imgView.image = [UIImage imageNamed:@"aaa.png"];
[self.view addSubview: imgView];
[self.view sendSubviewToBack:imgView];
}
这里没有(只是将图像添加到init方法):
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
//ADDING BACKGROUND IMAGE
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
imgView.image = [UIImage imageNamed:@"aaa.png"];
[self.view addSubview: imgView];
[self.view sendSubviewToBack:imgView]; }
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
//NAV BAR COLOR
self.navigationController.navigationBar.tintColor = [UIColor blueColor];
}
这就是我称之为观点的方式:
Login *loginViewController = [[Login alloc] initWithNibName:nil bundle:nil];
UINavigationController *navCntrl1 = [[UINavigationController alloc] initWithRootViewController:loginViewController];
[self presentModalViewController:navCntrl1 animated:YES];
知道为什么吗?我很困惑......谢谢!!
答案 0 :(得分:1)
这与您的图像无关,而是与UINavigationControllers的创建方式有关。
这是您的代码(添加了一些评论):
// Create the view controller
Login *loginViewController = [[Login alloc] initWithNibName:nil bundle:nil];
// Create a navigation controller and add it
UINavigationController *navCntrl1 = [[UINavigationController alloc] initWithRootViewController:loginViewController];
第一次ui需要了解视图控制器的视图时,会调用 viewDidLoad
。如果您的viewDidLoad
方法想要编辑导航控制器的功能,则必须在调用viewDidLoad之前将您的视图控制器添加到导航控制器。
在您的第一个示例中,当您将视图控制器添加到导航控制器(上面的第二行)时,调用了viewDidLoad
。
在您的第二个示例中,当您在viewDidLoad
方法中说self.view
时,系统调用了initWithNibNamed:bundle:
。至关重要的是,在您的视图控制器知道它将被添加到导航控制器之前,这是。因此,当您说self.navigationController
时,它将不知道您正在谈论哪个导航控制器。它无法设置它不知道的东西的色调!
在您的第一个示例中,{/ 1>在之后被称为您已将视图控制器添加到导航控制器中,因此当您说viewDidLoad
它知道您正在谈论哪个导航控制器时关于并可以相应地设置色调。
要自行测试,请将self.navigationController
放入NSLog(@"%@", self.navigationController);
方法中 - 我打赌它会为第二个示例输出viewDidLoad
;)
仅供参考:
你应该总是做第一个例子 - 它只会在需要时创建图像,并允许你在内存不足的情况下卸载图像。