完全显示/隐藏标签栏控制器并使用空间

Posted

技术标签:

【中文标题】完全显示/隐藏标签栏控制器并使用空间【英文标题】:completely show/hide tabbar controller and use the space 【发布时间】:2012-02-16 10:45:25 【问题描述】:

我试图隐藏标签栏控制器并显示 uiimageview 类似于它在 iphone 的本机照片库中的完成方式。我已经创建了库,但是通过隐藏标签栏在下一个视图中显示图像时遇到问题。我可以隐藏标签栏,但是当我尝试添加 uiimageview 时,它不会占用标签栏占用的空间。我希望我的 uiimageview 拉伸到屏幕底部。 我什至想在那个空白处添加一个按钮,但我做不到。

我隐藏标签栏的代码:

 self.tabBarController.tabBar.hidden = YES;

有人能帮帮我吗?

谢谢 潘卡伊

【问题讨论】:

你有什么解决办法吗? 【参考方案1】:

试试这个

self.tabBarController.tabBar.hidden = YES;

 [imageView setFrame:CGRectMake(0,0,320,480)];

【讨论】:

我已经尝试过很多次了,但是还是不行。【参考方案2】:

只需使用以下两种方法来隐藏或显示标签栏控制器。将此方法放在委托类中,以便从任何类中调用。

- (void) hideTabBar:(UITabBarController *) tabbarcontroller 

int height = 480;

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];

for(UIView *view in tabbarcontroller.view.subviews) 
    if([view isKindOfClass:[UITabBar class]]) 
        [view setFrame:CGRectMake(view.frame.origin.x, height, view.frame.size.width, view.frame.size.height)];
     
    else 
        [view setFrame:CGRectMake(view.frame.origin.x,view.frame.origin.y, 320, 436)];
    

[UIView commitAnimations];

- (void) showTabBar:(UITabBarController *) tabbarcontroller 

    int height = 480;

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3]; 

    for(UIView *view in tabbarcontroller.view.subviews) 

        if([view isKindOfClass:[UITabBar class]]) 
            [view setFrame:CGRectMake(view.frame.origin.x, height, view.frame.size.width, view.frame.size.height)];            
         
        else 
            [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, height)];
        
        

    [UIView commitAnimations];

【讨论】:

是否应该硬编码高度,考虑不同的外形尺寸?也许'int height = [[UIScreen mainScreen] bounds].size.height;' ?【参考方案3】:

你需要设置tabBarController的view属性底部子view的frame,像这样:

self.tabBarController.tabBar.hidden = YES;
UIView* subview = (UIView*)[self.tabBarController.view.subviews objectAtIndex:0];
imageView.frame = subview.frame = self.window.bounds;

这是我在一些生产产品中以某种形式使用的东西。你是否真的想使用self.window.bounds取决于你当前的类是否有一个指向UIWindow的mainWindow实例的window属性,你是否支持多个方向(不管当前的@987654325如何,window的边界都保持不变@,视图控制器旋转,窗口不旋转)以及是否需要考虑状态栏。如果考虑到状态栏 (UIStatusBar),请将 y 和高度偏移 20。将子视图转换为 UIView 允许您在这种情况下使用点语法(静态分析器无法判断哪些对象在数组中)。

【讨论】:

【参考方案4】:

我已经为此苦苦挣扎了好几个小时。最后我找到了解决方案。只需按照以下步骤操作:

在 Storyboard 的子视图控制器(您要隐藏标签栏的那个)中勾选 Hide Bottom Bar on Push 框。

在根视图控制器的viewWillAppear 方法中添加以下代码:self.tabBarController?.tabBar.hidden = false

在推送视图控制器的viewWillAppear 方法中添加以下代码:self.tabBarController?.tabBar.hidden = true

就是这样。它只是工作!

【讨论】:

以上是关于完全显示/隐藏标签栏控制器并使用空间的主要内容,如果未能解决你的问题,请参考以下文章

如何隐藏带有另一个视图控制器的标签栏视图控制器?

隐藏标签栏并在该位置添加工具栏

模态视图控制器隐藏标签栏

在界面生成器中隐藏视图控制器的标签栏

推/回时隐藏/显示标签栏。迅速

如何隐藏 Tabbarcontroller 的第一个视图控制器并直接转到下一个控制器但应在底部显示标签栏项目