您的位置:首页 > 产品设计 > UI/UE

IOS中如何在多层界面之间显示与隐藏标签栏(UITabBar)

2016-03-23 11:23 567 查看
使用hidesBottomWhenPushed=YES属性设置,可以让本级界面及其以后界面都隐藏,如果之后还有界面要显示就没办法了

1、不使用系统自带的UITabBar,所以首先要自定义一个标签栏,继承于UIView就可以了

2、隐藏系统自带的tabbar,方法:在继承于UITabBarController的类中,添加self.tabBar.hidden = YES;

3、写一个超基类,让工程中的所有视图控制器器都直接或者间接地继承于这个超基类

4、在这个超基类中,viewDidLoad方法中,添加self.hidesBottomBarWhenPushed =YES;

      然后对外公开两个方法:-hideCustomTabBar:       -showCustomTabBar:

这样就可以在子类中隐藏或者显示的地方,在viewWillAppear:方法中调用即可。

在这两个方法中,可以使用动画效果来显示或者隐藏。

把下面的代码写到了项目中所有视图控制器的父类中:(记得暴露出这两个方法,让子类调用)

#pragma mark - 隐藏TabbBar
- (void)hideTabbar {
if (_originY + 49 == fabs(self.tabBarController.tabBar.frame.origin.y)) {
return ;
}
for (UIView *v in [self.tabBarController.view subviews]) {
if ([v isKindOfClass:[UITabBar class]]) {
[UIView animateWithDuration:0.01 delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(){

CGRect frame = v.frame;
frame.origin.y += 49.0f;
v.frame = frame;
NSLog(@"tabBar originY: %f", frame.origin.y);
} completion:nil];
} else {
[UIView animateWithDuration:0.01 delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(){

CGRect frame = v.frame;
frame.size.height += 49.0f;
v.frame = frame;

} completion:nil];
}
}
return;
}

#pragma mark - 显示TabBar
- (void)showTabBar {
if (_originY == fabs(self.tabBarController.tabBar.frame.origin.y)) {
return ;
}
for (UIView *v in [self.tabBarController.view subviews]) {
if ([v isKindOfClass:[UITabBar class]]) {
[UIView animateWithDuration:0.01 delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(){

CGRect frame = v.frame;
frame.origin.y -= 49.0f;
v.frame = frame;
} completion:nil];
} else {
[UIView animateWithDuration:0.01 delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(){
CGRect frame = v.frame;
frame.size.height -= 49.0f;
v.frame = frame;
} completion:nil];
}
}
return;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: