隐藏时,UITabBar会留下一个白色矩形

时间:2010-03-11 15:33:05

标签: iphone objective-c uitabbarcontroller hidden uitabbar

我无法谷歌一个可以接受的解决方案,可以应用于我的项目。

我的应用是一个图形工具,有三个标签;一个用于图表本身,另外两个用于浏览/搜索功能,可以添加到图表中。所有选项卡都是导航控制器。

图表本身的标签,在纵向模式下,显示图表的小预览,并列出下图中每个实体的详细信息,并在底部显示标签栏。

当用户旋转到横向模式时,图形将全屏显示,其他所有内容(包括标签栏)都会消失。这就是我遇到问题的地方,因为我的图表的GLView总是被标签栏所在的白色矩形遮挡。

我尝试将导航控制器视图的大小更改为全屏,将标签栏控制器视图的大小更改为全屏,将标签栏本身的框架大小更改为CGRect(0,0,0, 0),变得情绪失控,在桌子上敲拳头,在MacBook上喊着辱骂语言等等;一切都无济于事。

我怎样才能让它发挥作用?

18 个答案:

答案 0 :(得分:34)

我遇到了这个问题,我通过更改内容视图的tabbar子视图框来解决它(标签栏中有2个子视图 - 内容视图(#0)和条形视图(#1)):

[[self.tabBarController.view.subviews objectAtIndex:0] setFrame:FULLSCREEN_FRAME];

答案 1 :(得分:5)

我遇到了同样的问题,并在此处找到答案:UIView doesn't resize to full screen when hiding the nav bar & tab bar

只需在隐藏标签栏时调整tabbarcontroller视图的大小:

tabBarController.view.frame = CGRectMake(0, 0, 320, 480);

答案 2 :(得分:3)

这个适用于我:

[[self.tabBarController.view.subviews objectAtIndex:0] setFrame:CGRectMake(0, 0, 320, 480)];

我在选项卡的viewControllers中有这个代码。

答案 3 :(得分:3)

似乎将底部栏隐藏为标签栏的问题....我正面对并为此搜索了很多。我认为它是这个标签栏的错误。然后......我们可以用一些技巧.....

你可以试试这个,如果你试图隐藏标签栏并留下空白区域,肯定会有所帮助。

你需要编写的编码地狱

[self setHidesBottomBarWhenPushed:YES];

当您推送到其他视图时,您不需要Tab栏就可以写它

twitDetObj=[[TwitDetail alloc] initWithNibName:@"TwitDetail" bundle:nil];
[self.navigationController pushViewController:twitDetObj animated:YES];
self.hidesBottomBarWhenPushed=YES;
[twitDetObj release];

希望这对你有用.....

答案 4 :(得分:1)

注意 - 此解决方案仅用于删除隐藏标签栏后留下的空白区域。

隐藏标签栏的最佳解决方案是 - @Michael Campsall answer here

最简单的解决方案是更改您的视图(在我的情况下是其tableView)底部约束,而不是使用BottomLayoutGuide给出底部约束,并使用superview。附上截图以供参考。

下面屏幕截图中显示的约束会产生问题,根据下一个屏幕截图进行更改

enter image description here

删除空格的实际约束应该根据此(下面)截图。

enter image description here

答案 5 :(得分:0)

对于那些仍在为此奋斗的人。我发现问题在于约束。标签栏已隐藏,但是它已经改变了我从情节提要中的约束。

SWIFT 3 +

self.tabBarController?.tabBar.isHidden = true

let cons = NSLayoutConstraint(item: textview, attribute: NSLayoutAttribute.bottom,
         relatedBy: NSLayoutRelation.equal, toItem: self.view, 
         attribute: NSLayoutAttribute.bottom, multiplier: 1.0, constant: 0)

view.addConstraints([cons])

在我的情况下,“ textview”是项目,应该填充隐藏的TabBar中的空白区域。

答案 6 :(得分:0)

我的解决方案:在视图控制器的self.edgesForExtendedLayout = .None中设置viewDidLoad()

答案 7 :(得分:0)

- (void)hidesTabBar:(BOOL)hidden {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0];

    for (UIView *view in self.tabBarController.view.subviews) {
        if ([view isKindOfClass:[UITabBar class]]) {
            if (hidden) {
                [view setFrame:CGRectMake(view.frame.origin.x, [UIScreen mainScreen].bounds.size.height, view.frame.size.width , view.frame.size.height)];
            } else {
                [view setFrame:CGRectMake(view.frame.origin.x, [UIScreen mainScreen].bounds.size.height - 49, view.frame.size.width, view.frame.size.height)];
            }
        } else {
            if([view isKindOfClass:NSClassFromString(@"UITransitionView")]) {
                if (hidden) {
                    [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, [UIScreen mainScreen].bounds.size.height)];
                } else {
                    [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, [UIScreen mainScreen].bounds.size.height - 49 )];
                }
            }
        }
    }

    [UIView commitAnimations];
}

答案 8 :(得分:0)

推送视图中的

- (BOOL)hidesBottomBarWhenPushed
{
    return YES;
}

答案 9 :(得分:0)

在取消隐藏tababr并到达特定视图后开启。 Tabbar在uitababr上方显示空白区域。这解决了我的问题

-(void)viewWillAppear:(BOOL)animated
{ 
    [[self.tabBarController.view.subviews objectAtIndex:0] setFrame:CGRectMake(0, 0, 320, 568)];

}

答案 10 :(得分:0)

我认为你需要将self.navigationController.view.frame设置为完整大小,即在设置tabbar hidden之前将其设置为UIApplication屏幕框架

答案 11 :(得分:0)

检查下面的UIView。它可能设置为白色,因此当您隐藏标签时,您会显示白色的UIView。尝试将UIView设置为Transparent。

答案 12 :(得分:0)

它因为标签栏所在的空间,当你设置标签栏隐藏时没有分配给其他视图你可以设置相应的视图来拉伸或填充整个屏幕,如缩放填充或方面填充类似或更大的视图而不是iphine屏幕,这样当你将手机更改为横向时,它可以完成填充屏幕

答案 13 :(得分:0)

这只是一种解决方法,但您是否尝试在用户旋转到横向时以模态方式显示图表?这应该模糊标签栏。

您可以使用

避免转换

[viewController presentModalViewController:graph animated:NO]

答案 14 :(得分:0)

标签栏视图控制器的currentViewController.view的一些超级视图将clipToBounds设置为YES(它的类名是UITransitionView,如果没有记错的话)。要访问它,请使用

tabBarController.currentViewController.view.superview.superview.clipToBounds = NO;

执行此操作后,您尝试调整视图的大小不会受到任何限制,并且会成功。祝你好运!

答案 15 :(得分:0)

你确定它是模糊的而不只是A)没有重绘或B)你的GLView框架没有占据那个空间吗?

答案 16 :(得分:-1)

我假设您已经检查过视图中的自动调整箭头了吗?

答案 17 :(得分:-4)

您是否尝试使用

隐藏UITabBar
tab_bar.hidden = YES