Iphone setNavigationBarHidden:否从SuperView中移除后不工作

Iphone setNavigationBarHidden:否从SuperView中移除后不工作,iphone,objective-c,xcode,ios,Iphone,Objective C,Xcode,Ios,我正在我的局部视图控制器上添加一个UIWebView子视图,该控制器有一个导航栏。我想在WebView子视图中隐藏导航栏,并在从superview中删除时再次显示它,以便在查看WebView时有更多的屏幕空间 我的代码的问题是,在添加子视图后,导航栏被成功隐藏,但在删除子视图后再次尝试显示导航栏时,导航栏不起作用 任何帮助都将不胜感激。多谢各位 这是我的代码: // In InstrumentsDetailViewController.m - (IBAction)edu1Link:(id)se

我正在我的局部视图控制器上添加一个UIWebView子视图,该控制器有一个导航栏。我想在WebView子视图中隐藏导航栏,并在从superview中删除时再次显示它,以便在查看WebView时有更多的屏幕空间

我的代码的问题是,在添加子视图后,导航栏被成功隐藏,但在删除子视图后再次尝试显示导航栏时,导航栏不起作用

任何帮助都将不胜感激。多谢各位

这是我的代码:

// In InstrumentsDetailViewController.m

- (IBAction)edu1Link:(id)sender {

    _webViewController = [[WebViewController alloc]
                          initWithNibName:@"WebViewController" bundle:nil];

    [UIView beginAnimations:@"flipping view" context:nil];
    [UIView setAnimationDuration:1];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft
                           forView:self.view cache:YES];

    [self.view addSubview:_webViewController.view];

    [self.navigationController setNavigationBarHidden:YES animated:YES];

    [UIView commitAnimations];
}


// In WebViewController.m

- (IBAction) doneButton:(id)sender {

    [UIView beginAnimations:@"flipping view" context:nil];
    [UIView setAnimationDuration:1];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight
                           forView:self.view.superview cache:YES];

    [self.view removeFromSuperview];

    [self.navigationController setNavigationBarHidden:NO animated:YES];

    [UIView commitAnimations];
}

关于我在代码中看到的内容: -您正在向InstrumentsDetailViewController实例主视图添加子视图。 -子视图是WebViewController实例的主视图

但是…WebViewController永远不会推送或弹出到导航堆栈中。因此,WebViewController实例没有对navigationController的引用,调用[self.navigationController]将向…nil发送setNavigationBarHidden:否动画:是消息

你可以: -将WebviewController实例推/弹出到导航堆栈中,这样它将具有对navigationController的引用。 或 -将WebViewController实例添加为InstrumentsDetailViewController的子级,然后调用

[[[self parentViewController] navigationController] setNavigationBarHidden:NO animated:YES];


搜索addChildViewController:

不应
[self.navigationController setnavigationbar隐藏:否动画:是]是否在您的
仪器DetailViewController
中?在我看来,您似乎正在尝试显示刚刚删除的视图的导航控制器。请尝试替换
[self.navigationController setNavigationBarHidden:否动画:是][[[self-parentViewController]navigationController]setNavigationBarHidden:否动画:是]
应该会调用
parentViewController
SimonBS,感谢您的快速回复。这似乎是一个很好的解决方案,但我试过了,但没有成功。既然superview中的控制器似乎应该是parentViewController,您知道为什么它不起作用吗?某些对象属性会重置为动画前的值。这可能是因为某种原因在这里发生的。放置[self.navigationController setNavigationBarHidden:否动画:是];在动画块之外,在[UIView commitAnimations]之后;看看会发生什么。我试着把它放在[UIView commitAnimations]之后;,但不幸的是,这没什么区别。谢谢你。