将 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

将 UIBarButtonItem 添加到 UIViewController 推送到 UINavigation 控制器

动态推送到 UIViewController

导航控制器有时会使用情节提要推送到黑屏

将多个 UICollectionViewCell 推送到同一个 UIViewController