在做项目的时候,遇到了一个难题,使用hidesBottomWhenPushed=YES属性设置,可以让本级界面及其以后界面都隐藏,但是根据项目
需求,在第4层是需要显示标签栏的。
于是想了很多的办法,每个要显示的push的界面前都加了hidesBottomWhenPushed=YES,要隐藏的push的界面都加了hidesBottomWhenPushed=NO,
但是一样不好使。
手动调用self.tabbarchontroller.tabbar.hiden = YES,这样写可以隐藏标签栏的项,但是上面有一层白色的空白视图占着,一样没有解决问题。
最后想到了修改标签栏的Frame的方法来解决,果真能行。
我把下面的代码写到了项目中所有视图控制器的父类中:(记得暴露出这两个方法,让子类调用)
#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;
}