在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