0

在我的根视图中,我创建了一个导航控制器,并将其添加到状态栏下方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; 
} 

回答

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推到VC1时,我需要启用导航栏。所以在VC1本身,在消失期间iI做下面的事情。

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

在VC2:导航栏应该显示

当我按回到VC2,我实际上是再次隐藏的导航栏。所以,我在视图中执行它将会消失。

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

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

1

所以我相信这是你的问题

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

它有蜜蜂每当你的视图加载时都会调用它。我相信如果你多次前进和后退,你的视窗就会出现。是吗?如是。确保只会调用一次。

我希望这可以帮助你。

+0

谢谢。这是有道理的,但没有它只被调用一次。 –