导航控制器的弹出动画时导航栏向上移动

时间:2016-05-14 16:02:43

标签: ios objective-c uiview uinavigationcontroller uinavigationbar

在我的根视图中,我创建了一个导航控制器,并将其添加到状态栏下方20 px。

我的导航视图控制器

状态栏显示正常。

enter image description here

当我点击返回时,(冻结动画截图)。

动画发生时视图会向上移动。和  完成后,状态栏将显示回来。

enter image description here

代码:这是我将导航控制器添加到我的VC

的方法

在RootView中:

navController = [[UINavigationController alloc]initWithRootViewController:myView];

navController.navigationBar.translucent = YES;
navController.view.autoresizingMask = UIViewAutoresizingNone;

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    CGRect frame=navController.view.frame;

    frame.origin.y += 20;
    frame.size.height-=20;
    navController.view.frame=frame;
}

2 个答案:

答案 0 :(得分:1)

所以我相信这是你的问题

frame.origin.y += 20;
frame.size.height-=20;
navController.view.frame=frame;

每次加载视图时都会调用它。我相信如果你多次前进和后退,你的窗户上的视野就会上升。是吗?如是。确保只调用一次。

我希望这会对你有所帮助。

答案 1 :(得分:1)

这个答案对我帮助很大。

Push / Pop View Controller With Navigation Bar from View Controller Without Navigation Bar

我将导航控制器添加到第一个VC,它希望隐藏导航栏

我在下面的代码段中将其作为animated:NO。正确的用法必须是使用委托本身的动画boolean

在VC1中:应隐藏导航栏

我必须隐藏下面的导航栏。

-(void)viewWillAppear:(BOOL)animated {
    // Hide the bar with animation how viewWillAppear is called
    [self.navigationController setNavigationBarHidden:YES animated:animated];
}

当我将VC2推送到VC​​1时,我需要启用导航栏。所以在VC1本身,在消失期间我会做下面的事情。

-(void)viewWillDisappear:(BOOL)animated{
    // Show the bar with animation how viewWillDisappear is called
    [self.navigationController setNavigationBarHidden:NO animated:animated];
}

在VC2中:应显示导航栏

当我在VC2中按回来时,我实际上必须再次隐藏导航栏。所以,我在viewWillDisappear中做到了。

-(void)viewWillDisappear:(BOOL)animated{
    // Hide the bar with animation how viewWillAppear is called
    [self.navigationController setNavigationBarHidden:YES animated:animated];
}
  

主键是animated:animated而不是animated:NO ..   难以置信的。!