在viewWillDisappear期间隐藏UINavigationController的UIToolbar:

我有一个带有UITableView菜单的iPhone应用程序。 当选中表中的一行时,相应的视图控制器将被压入应用程序的UINavigationController堆栈中。

我的问题是, MenuViewController不需要工具栏,但推入堆栈的UIViewControllers可以。 被推入的每个UIViewController调用setToolbarHidden:animated: in viewDidAppear: setToolbarHidden:animated: 要隐藏工具栏,我调用setToolbarHidden:animated: in viewWillDisappear: setToolbarHidden:animated:

显示工具栏的工作原理,当推出的视图出现时,工具栏向上滑动,视图正确调整大小。 但是,当按下后退按钮时,工具栏向下滑动,但视图不会调整大小。 这意味着当视图底部有一个黑色条带时,我会尝试在隐藏工具栏之前将工具栏的高度添加到视图的高度,但这会导致视图在过渡,以至于仍然存在黑条。

我意识到我可以管理自己的UIToolbar,但为了方便起见,我想使用内置于UIToolbar中的UINavigationControllers

这个论坛帖子提到了同样的问题,但没有提到解决方法。


我也遇到过这个问题。 在我的情况下,我发现成功隐藏工具栏而不显示窗口背景的唯一方法[self.navigationController setToolbarHidden:YES animated:animated]在视图控制器的-viewDidAppear:方法中调用[self.navigationController setToolbarHidden:YES animated:animated]


我对这个问题的答案并不满意,所以我发布了自己的:同时参考源视图控制器和目标视图控制器

我解决了我的问题。 它也可能适用于你的(虽然这个问题很老,我想这可能会帮助像我这样的人阅读这篇文章六次寻找提示)。

这就是我所做的。 我不知道标记协议是不是惯用的objective-c,但我把它们比作我在c#中使用的属性,所以我有这个标记协议:

@protocol HidesNavigationItem
@end

我添加了UINavigationControllerDelegate到我的AppDelegate。 我不确定这是否是件好事。 我想将这个实现保存在另一个对象中,但现在,这是我放置它的地方。 这是实现:

#pragma mark Navigation Controller Delegate
-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [navigationController setNavigationBarHidden:[viewController conformsToProtocol:@protocol(HidesNavigationItem)] animated:animated];
}

这样,我可以在我的UIViewController实现上设置我的标记协议,如下所示:

@interface MyViewController : UIViewController <HidesNavigationItem>

如果我没有这个界面,它会把它放回去。

最后,在我的appDelegate应用程序:didFinishLaunchingWithOptions:方法中,我将代理连线如下:

if ([self.window.rootViewController isMemberOfClass:[UINavigationController class]])
    ((UINavigationController*)self.window.rootViewController).delegate = self;

现在我没有黑盒子,也没有柴郡猫。 我的解决方案当然是关于导航栏,但我相信它在工具栏上的工作原理是一样的。 这与Danra的答案非常相似,不同的是我获得了没有“animated:animated”的黑盒子。


对于推送时不需要工具栏的UIViewController,可以考虑使用其中之一

为该UIViewController实现hidesBottomBarWhenPushed方法:

// method to be added to the UIViewController that has no toolbar
- (BOOL) hidesBottomBarWhenPushed {
    return YES;
}

或者在推入UIViewController之前,设置hidesBottomBarWhenPushed的值:

viewControllerWithNoToolBar.hidesBottomBarWhenPushed = YES
[self.navigationController pushViewController:viewControllerWithNoToolBar animated:YES];
链接地址: http://www.djcxy.com/p/90309.html

上一篇: Hiding a UINavigationController's UIToolbar during viewWillDisappear:

下一篇: Printf on data stored as union gives no output after called for double variable