Die Lösungen von Saurahb und karlbecker_com sind großartig, obwohl sie einen offensichtlichen Popping-Effekt verursachen können, wenn die Ansicht eine Tabellenansicht enthält, während die Registerkartenleiste eine Sicherungskopie erstellt . Ich habe einige Änderungen vorgenommen und sie zu einer einzigen Funktion zusammengefasst (als Kategorie in UITabBarController). Es ist nicht ganz perfekt (verzögerte Korrekturanimation), liefert aber gute Ergebnisse mit Tabellen.
Wenn Sie Animationsblöcke und Kategorien mögen, probieren Sie dies aus. Orientierung und gerätefreundlich.
UITabBarController + ShowHideBar.m:
#import "UITabBarController+ShowHideBar.h"
@implementation UITabBarController (ShowHideBar)
- (void) setHidden:(BOOL)hidden{
CGRect screenRect = [[UIScreen mainScreen] bounds];
float fHeight = screenRect.size.height;
if( UIDeviceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) ){
fHeight = screenRect.size.width;
}
if(!hidden) fHeight -= self.tabBar.frame.size.height;
[UIView animateWithDuration:0.25 animations:^{
for(UIView *view in self.view.subviews){
if([view isKindOfClass:[UITabBar class]]){
[view setFrame:CGRectMake(view.frame.origin.x, fHeight, view.frame.size.width, view.frame.size.height)];
}else{
if(hidden) [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, fHeight)];
}
}
}completion:^(BOOL finished){
if(!hidden){
[UIView animateWithDuration:0.25 animations:^{
for(UIView *view in self.view.subviews)
{
if(![view isKindOfClass:[UITabBar class]])
[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, fHeight)];
}
}];
}
}];
}
@end
UITabBarController + ShowHideBar.h:
#import <UIKit/UIKit.h>
@interface UITabBarController (ShowHideBar)
- (void) setHidden:(BOOL)hidden;
@end
Verwendung:
[self.tabBarController setHidden:YES];
[self.tabBarController setHidden:NO];