如何以编程方式隐藏UITabBar?在SO上已被多次询问和回答,但答案似乎大致有两种:
1)使用导航控制器,可以使用hidesBottomBarWhenPushed属性在推送之前隐藏下一个vc的标签栏。 Typical answer here
2)浏览标签栏控制器的视图层次结构并修改标签栏的框架和/或可见性。 Typical answer here
但两种答案都不尽如人意。 1)如果我们需要隐藏我们所在视图上的标签栏,比如旋转到横向时,该怎么办? 2)通过Apple库的私有视图层次结构唤醒的半页代码是a。笨重的,b。倾向于不可预见的破坏,c。可能是应用程序批准的阻止程序。
那么应用程序要做什么?答案是不允许的吗?是否有苹果文件参考支持?这将是一个悲伤的答案。 Imo,旋转案例是隐藏标签栏的正当理由。
提前感谢您的帮助。
答案 0 :(得分:1)
很抱歉延迟回复,但我已经提取了我的代码,您可以看到我如何旋转设备以仅在横向显示全屏显示“地图视图”。
-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
if(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
[self hideTabBar:self.tabBarController];
[self.view bringSubviewToFront:self.eventsMapView];
self.eventsMapView.bounds = self.view.bounds;
self.eventsMapView.frame = CGRectMake(0, -208, self.view.frame.size.width, 300);
} else if(toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown || toInterfaceOrientation == UIInterfaceOrientationPortrait) {
[self showTabBar:self.tabBarController];
[self.view sendSubviewToBack:self.eventsMapView];
}
}
由于我们在其中调用方法来实际隐藏和显示标签栏,我们还需要在.m文件中定义这些方法:
#pragma mark - Tab Bar Methods -
-(void)hideTabBar:(UITabBarController *)tabbarcontroller {
[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, 480, view.frame.size.width, view.frame.size.height)];
} else {
[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, 480)];
}
}
[UIView commitAnimations];
}
-(void)showTabBar:(UITabBarController *)tabbarcontroller {
[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, 431, view.frame.size.width, view.frame.size.height)];
} else {
[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, 431)];
}
}
[UIView commitAnimations];
}
如果您已经在选项卡栏控制器中,那么您需要确保每个子项(或单个选项卡ViewController)返回TRUE以获得如下所示的方向。
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return TRUE;
}
希望这有帮助 - 如果您有任何问题发表评论,我会更新我的答案,以便更好地展示它。
答案 1 :(得分:0)
您可以找到一些有用的代码here。您可以从shouldrotate:method
调用hideTabbar答案 2 :(得分:0)