问题:
- 当我通过这个方法设置了导航栏背景图片后出现的问题
+ (void)initialize
{
UINavigationBar *bar = [UINavigationBar appearance];
// 背景图片
[bar setBackgroundImage:[UIImage imageNamed:@"navBarBJImg"] forBarMetrics:UIBarMetricsDefault];
}
在view中打印下View.frame
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"%@", NSStringFromCGRect(self.view.frame));
// 打印结果 {{0, 0}, {375, 667}}
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"2== %@", NSStringFromCGRect(self.view.frame));
// 打印结果 2== {{0, 64}, {375, 603}}}
解决
- 我的猜测:设置了一张不透明的背景图为导航栏背景图,view往下偏移64是因为导航栏的透明度变为NO导致的
- 验证:我们在设置完图片后,手动在将导航栏的透明度置为yes,猜测结果:这时候view将不再偏移
+ (void)initialize
{
UINavigationBar *bar = [UINavigationBar appearance];
// 背景图片
[bar setBackgroundImage:[UIImage imageNamed:@"navBarBJImg"] forBarMetrics:UIBarMetricsDefault];
[bar setTranslucent:YES];
}
- 结论:猜测成立,所以我们不能使用不透明图片作为导航栏背景图
demo地址