在隐藏掉状态栏后,重新设置navigationbar的frame

//状态栏的高度是20,navigationBar的高度是44
//这段代码是在- (void)viewDidAppear:(BOOL)animated这个方法中设置的
//更改导航栏的frame
    self.navigationController.navigationBar.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 64);    //调整导航栏的标题的位置    [self.navigationController.navigationBar setTitleVerticalPositionAdjustment:-10 forBarMetrics:UIBarMetricsDefault];    //调整导航栏的图片的位置    [self.navigationItem.leftBarButtonItem setBackgroundVerticalPositionAdjustment:-10 forBarMetrics:UIBarMetricsDefault];
    [self.navigationItem.rightBarButtonItem setBackgroundVerticalPositionAdjustment:-10 forBarMetrics:UIBarMetricsDefault];

//- (void)viewWillDisappear:(BOOL)animated在这个方法中要把之前的位置调整重新调回来
//把调整的位置重新改回来  标题不用在重新调整
    [self.navigationController.navigationBar setTitleVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsDefault];
    [self.navigationItem.leftBarButtonItem setBackgroundVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsDefault];
[self.navigationItem.rightBarButtonItem setBackgroundVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsDefault];

//这个设置navigationBar的frame  在程序从后台进入前台的通知方法,需要重新设置navigationBar的frame
//用通知就可以实现
- (void)applicationDidBecomeActive:(UIApplication *)application {    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.//    NSLog(@"applicationDidBecomeActive");       //重后台进入前台的时候,通知 扫面界面 重新计算 一下 navigationbar的frame    [[NSNotificationCenter defaultCenter]postNotificationName:@"applicationWillEnterForeground" object:nil];
}
//然后,程序从后台进入前台的时候,接收到通知, 来重新设置navigationBar的frame

//当然,从这个界面跳转到其他的界面,在从其他界面返回到这个界面的时候,需要在其他界面的返回之前,做下面一步操作,来解决返回到这个界面的时候,图标跳闪的问题
//调整导航栏的图片的位置    [self.navigationItem.leftBarButtonItem setBackgroundVerticalPositionAdjustment:10 forBarMetrics:UIBarMetricsDefault];
    [self.navigationItem.rightBarButtonItem setBackgroundVerticalPositionAdjustment:10 forBarMetrics:UIBarMetricsDefault];

你可能感兴趣的:(在隐藏掉状态栏后,重新设置navigationbar的frame)