Nat*_*ies 30 iphone cocoa-touch uitoolbar uikit uinavigationcontroller
我有一个带有UITableView菜单的iPhone应用程序.选择表中的行时,相应的视图控制器将被推送到应用程序的UINavigationController堆栈中.
我的问题是,MenuViewController它不需要工具栏,但是UIViewControllers它们被推入堆栈中.每个UIViewController那个被推开的呼叫setToolbarHidden:animated:在viewDidAppear:.要隐藏工具栏,我呼吁setToolbarHidden:animated:在viewWillDisappear:.
显示工具栏的工作方式,以便当推出的视图出现时,工具栏向上滑动并且视图正确调整大小.但是,按下后退按钮时,工具栏会向下滑动,但视图不会调整大小.这意味着当另一个视图过渡时,沿着视图底部有一个黑色条带.我已经尝试在隐藏工具栏之前将工具栏的高度添加到视图的高度,但是这会导致视图在转换,以便仍然有一个黑条.
我意识到我可以管理自己的UIToolbar,但UINavigationControllers为了方便起见,我想使用内置的UIToolbar.
这个论坛帖子提到了同样的问题,但没有提到解决方法.
Jef*_*ley 23
我也经历过这个问题.在我的例子中,我发现成功隐藏工具栏而不显示窗口背景的唯一方法是调用[self.navigationController setToolbarHidden:YES animated:animated]视图控制器的-viewDidAppear:方法.
我对这个问题的答案不满意所以我发布了自己的:同时参考源视图控制器和目标视图控制器
答案我解决了我的问题.它也可能对你有用(虽然这个问题已经很老了,我认为这可能会帮助像我这样的人阅读这篇文章六次寻找暗示).
这就是我做的.我不知道标记协议是否是惯用的目标-c,但是我把它们比作我在c#中使用的属性所以我有这个标记协议:
@protocol HidesNavigationItem
@end
Run Code Online (Sandbox Code Playgroud)
我将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];
}
Run Code Online (Sandbox Code Playgroud)
这样,我可以在我的UIViewController实现上设置我的标记协议,如下所示:
@interface MyViewController : UIViewController <HidesNavigationItem>
Run Code Online (Sandbox Code Playgroud)
如果我没有那个界面,它会把它放回去.
最后,在我的appDelegate的应用程序:didFinishLaunchingWithOptions:方法中,我像这样连接代理:
if ([self.window.rootViewController isMemberOfClass:[UINavigationController class]])
((UINavigationController*)self.window.rootViewController).delegate = self;
Run Code Online (Sandbox Code Playgroud)
现在我没有黑盒子,也没有柴郡猫.我的解决方案当然是关于导航栏,但我确信它对于工具栏来说是一样的.这与Danra的答案非常相似,只是我得到了没有"动画:动画"的黑匣子.
对于推送时不需要工具栏的UIViewController,您可以考虑使用其中任何一个
为该UIViewController实现hidesBottomBarWhenPushed方法:
// method to be added to the UIViewController that has no toolbar
- (BOOL) hidesBottomBarWhenPushed {
return YES;
}
Run Code Online (Sandbox Code Playgroud)
或者在推入UIViewController之前,设置hidesBottomBarWhenPushed的值:
viewControllerWithNoToolBar.hidesBottomBarWhenPushed = YES
[self.navigationController pushViewController:viewControllerWithNoToolBar animated:YES];
Run Code Online (Sandbox Code Playgroud)
die*_*ikh -2
这只是在黑暗中进行的一次疯狂尝试,但也许您应该在隐藏工具栏后让运行循环运行一次:
[viewController setToolbarHidden:YES animated:YES];
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.0]];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18073 次 |
| 最近记录: |