完全显示/隐藏标签栏控制器并使用空间
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
。
就是这样。它只是工作!
【讨论】:
以上是关于完全显示/隐藏标签栏控制器并使用空间的主要内容,如果未能解决你的问题,请参考以下文章