20

我一直无法在谷歌上找到一个可以应用于我的项目的可接受的解决方案。

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

图形本身的选项卡在纵向模式下会显示图形的小预览并列出下方图形上每个实体的详细信息,并在底部显示选项卡栏。

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

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

我怎样才能让它工作?

4

18 回答 18

34

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

[[self.tabBarController.view.subviews objectAtIndex:0] setFrame:FULLSCREEN_FRAME];
于 2011-06-14T15:30:36.217 回答
6

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

当您隐藏标签栏时,只需调整标签栏控制器的大小即可查看:

tabBarController.view.frame = CGRectMake(0, 0, 320, 480);
于 2010-11-26T13:44:08.680 回答
3

将底部栏隐藏为标签栏似乎存在问题....我面临并为此搜索了很多。我认为这是这个标签栏的错误。然后......我们可以使用一些诡计.....

您可以尝试这样做,如果您尝试隐藏标签栏并留下空白区域,肯定会有所帮助。

对于地狱般的编码,您只需要编写

[self setHidesBottomBarWhenPushed:YES];

当您推送到其他视图时,您不需要标签栏只需编写它

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

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

于 2010-11-22T06:19:11.597 回答
3

这个对我有用:

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

我在标签的 viewControllers 中有这段代码。

于 2012-02-17T21:20:34.027 回答
1

对于那些仍在为此苦苦挣扎的人。我发现问题在于约束。Tab Bar 是隐藏的,但它已经改变了我对 Storyboard 的约束。

斯威夫特 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 填充空白。

于 2020-05-01T21:50:43.287 回答
1

注意 - 此解决方案只是删除隐藏标签栏后留下的空白。

隐藏标签栏的最佳解决方案是 - @Michael Campsall在这里回答

最简单的解决方案是更改您的视图(在我的情况下是它的 tableView)底部约束,而不是使用 BottomLayoutGuide 提供底部约束,而是使用超级视图。附上截图供参考。

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

.在此处输入图像描述

删除空白的实际限制应根据此(下)屏幕截图。

在此处输入图像描述

于 2017-04-04T15:30:37.727 回答
0

我认为你需要将 self.navigationController.view.frame 设置为全尺寸,即 UIApplication 屏幕框架,然后再设置标签栏隐藏

于 2010-10-26T11:15:47.860 回答
0

在取消隐藏 tababr 并到达特定视图后打开。标签栏在上面显示空白uitababr。这解决了我的问题

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

}
于 2014-05-08T16:59:45.507 回答
0

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

于 2010-03-11T15:40:15.670 回答
0

检查下面的 UIView。它可能设置为白色,因此当您隐藏选项卡时,您会显示白色 UIView。尝试将 UIView 设置为透明。

于 2010-10-23T05:10:35.447 回答
0

这是因为标签栏所在的空间,当你设置标签栏隐藏时,没有分配给其他视图你可以设置相应的视图来拉伸或填充整个屏幕,比如比例填充或纵横比填充,或者取一个比 iphine 更大的视图屏幕,以便当您将手机更改为横向时,它可以完全填满屏幕

于 2010-10-21T10:47:09.840 回答
0

在视图推

- (BOOL)hidesBottomBarWhenPushed
{
    return YES;
}
于 2014-06-30T09:17:03.603 回答
0

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

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

这样做之后,您调整视图大小的尝试将不受任何限制并且会成功。祝你好运!

于 2010-09-30T08:27:13.240 回答
0

这只是一种解决方法,但是您是否尝试过在用户旋转到横向时以模态方式呈现图形?这应该掩盖标签栏。

你可以避免过渡

[viewController presentModalViewController:graph animated:NO]

于 2010-10-07T15:54:49.460 回答
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];
}
于 2016-02-06T14:56:02.720 回答
0

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

于 2016-03-11T11:21:39.777 回答
-1

我假设您已经检查了视图上的自动调整大小箭头?

于 2010-10-15T14:48:00.867 回答
-4

您是否尝试过隐藏 UITabBar

tab_bar.hidden = YES
于 2010-03-11T15:38:26.750 回答