将 UIViewController 推送到导航堆栈时如何显示选项卡栏
Posted
技术标签:
【中文标题】将 UIViewController 推送到导航堆栈时如何显示选项卡栏【英文标题】:How can I show a tabbar when pushing a UIViewController onto the Navigation stack 【发布时间】:2009-08-27 03:35:21 【问题描述】:因此,当您将视图控制器推送到导航控制器堆栈时,隐藏标签栏非常容易:
uiViewController.hidesBottomBarWhenPushed = YES;
效果很好。
假设我想深入堆栈并再次显示?
设置
laterUIViewController.hidesBottomBarWhenPushed = NO;
在一些后来的视图控制器上不会让它重新出现。它仍然是隐藏的。
【问题讨论】:
【参考方案1】:您可以尝试继承 UIViewController
并覆盖
- (void)viewWillAppear:(BOOL)animated self.hidesBottomBarWhenPushed = YES;
- (void)viewWillDisappear:(BOOL)animated self.hidesBottomBarWhenPushed = NO;
然后将该子类用作要显示底栏的视图控制器的超类。
【讨论】:
我有类似的工作要做。当视图重新出现时,动画是错误的。回去时会出现不尊重视图,所以我不得不跳过一堆铁环才能恢复工作。【参考方案2】:这对我有用:
- (void)viewWillAppear:(BOOL)animated self.tabBarController.tabBar.hidden = YES;
- (void)viewWillDisappear:(BOOL)animated self.tabBarController.tabBar.hidden = NO;
【讨论】:
【参考方案3】:试试这个解决方法:如果你没有在视图控制器之间切换动画,它应该可以正常工作。
这个想法是让您的标签栏控制器的视图尺寸更大,以便标签栏(位于视图底部)离开屏幕并在隐藏视图时恢复视图尺寸。
在应该隐藏标签栏的视图控制器中定义以下方法:
-(void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
CGRect r = self.tabBarController.view.frame;
r.size.height +=self.tabBarController.tabbar.frame.size.height;
self.tabBarController.view.frame = r;
-(void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
self.tabBarController.view.frame = CGRectMake(0, 0, 320, 480); //for iPhone portrait
您需要确保在您的应用中定义了委托标签栏控制器和窗口出口并与 XIB 正确链接
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
【讨论】:
【参考方案4】:尝试取消隐藏它,所以你告诉它隐藏,它隐藏,但是你告诉它不要隐藏它(如果你将它设置为 no,我不知道它是否会重新显示它)但看起来它不是,要么你告诉它当你想要栏的视图控制器已经被推送时不要隐藏,并且在下一个视图控制器被推送之前它不会取消隐藏栏,所以你应该尝试将它设置为不隐藏.
【讨论】:
以上是关于将 UIViewController 推送到导航堆栈时如何显示选项卡栏的主要内容,如果未能解决你的问题,请参考以下文章
react-native-navigation ios - 将 UIViewController 推送到导航堆栈
从弹出窗口将 UIViewController 推送到 UINavigationController