iOS Ausblenden der tab-Leiste in iOS 6 erstellt schwarze Balken (fix für iOS 6 bricht iOS 7!)
Habe ich eine Anwendung im Registerkartenformat und in einem tab gibt es eine UIWebView
. Wenn ich drehen Sie das Gerät ins Querformat, ich habe die UIWebView
Vollbild beim verstecken des status-und tab-Leiste.
Ich habe es in iOS 6, die ursprünglich beim drehen und ausblenden der tab-Leiste, es würde verlassen einen schwarzen Raum, wo die tab-bar war, so dass die fHeight
code behebt dieses. Aber auf iOS 6 funktionierte es perfekt, aber jetzt ist es tatsächlich schafft, die schwarze Balken, problem iOS 6 hatte!! Irgendwelche Ideen für einen workaround dazu?
Bitte siehe mein edit unter diesem
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;
{
if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
[self hideTabBar:self.tabBarController];
[[UIApplication sharedApplication] setStatusBarHidden:TRUE withAnimation:UIStatusBarAnimationSlide];
}
else
{
[self showTabBar:self.tabBarController];
[[UIApplication sharedApplication] setStatusBarHidden:FALSE withAnimation:UIStatusBarAnimationSlide];
}
}
- (void) hideTabBar:(UITabBarController *) tabbarcontroller
{
CGRect screenRect = [[UIScreen mainScreen] bounds];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
float fHeight = screenRect.size.height;
if( UIDeviceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) )
{
fHeight = screenRect.size.width;
}
for(UIView *view in self.tabBarController.view.subviews)
{
if([view isKindOfClass:[UITabBar class]])
{
[view setFrame:CGRectMake(view.frame.origin.x, fHeight, view.frame.size.width, view.frame.size.height)];
}
else
{
[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, fHeight)];
view.backgroundColor = [UIColor blackColor];
}
}
[UIView commitAnimations];
}
- (void) showTabBar:(UITabBarController *) tabbarcontroller
{
CGRect screenRect = [[UIScreen mainScreen] bounds];
float fHeight = screenRect.size.height - 49.0;
if( UIDeviceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) )
{
fHeight = screenRect.size.width - 49.0;
}
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
for(UIView *view in tabbarcontroller.view.subviews)
{
if([view isKindOfClass:[UITabBar class]])
{
[view setFrame:CGRectMake(view.frame.origin.x, fHeight, view.frame.size.width, view.frame.size.height)];
}
else
{
[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, fHeight)];
}
}
[UIView commitAnimations];
}
//Edit
Ich habe versucht, mit diesem aber ich bin mir nicht sicher, wie Sie Sie übergeben in der Ansicht richtig - ich habe versucht self.view
und webView und andere, aber ich nicht bekommen kann es arbeiten auf beiden iOS 6 und 7! Jede Art von Idee wäre wirklich hilfreich!!! Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen
- (void)setTabBarHidden:(BOOL)hidden view:(UIView *)view animated:(BOOL)animated
{
if (self.tabBar.hidden == hidden)
return;
CGRect screenRect = [[UIScreen mainScreen] bounds];
float height = 0.0f;
if(UIDeviceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation))
{
height = screenRect.size.width;
}
else
{
height = screenRect.size.height;
}
if (!hidden)
{
height -= CGRectGetHeight(self.tabBar.frame);
}
void (^workerBlock)() = ^() {
self.tabBar.frame = CGRectMake(CGRectGetMinX(self.tabBar.frame), height, CGRectGetWidth(self.tabBar.frame), CGRectGetHeight(self.tabBar.frame));
view.frame = CGRectMake(CGRectGetMinX(view.frame), CGRectGetMinY(view.frame), CGRectGetWidth(view.frame), height);
};
void (^completionBlock)(BOOL finished) = ^(BOOL finished) {
self.tabBar.hidden = hidden;
};
if (animated)
{
[UIView animateWithDuration:0.25f animations:workerBlock completion:completionBlock];
}
else
{
workerBlock();
completionBlock(YES);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich einen öffentlichen Gist auf Github für, wie wir dies tun.
Diese Lösung hat sich über mehrere Iterationen durch @Chris Byatt und unser team versucht es aus. Also, stellen Sie sicher, dass Sie laden Sie die neueste Version von dort.
Die Signatur der Methode wurde vereinfacht,
Können Sie es nennen wie Sie diese in Ihrem
UIViewController
Unterklasse:self.view
oder die UIWebView oder was?[self setTabBarHidden:YES view:self.view animated:YES];
(ich habe animiert:JA, als eine Methode definiert, die als bool?) und, um es zurück[self setTabBarHidden:NO view:self.view animated:YES];
aber ich bin immer der schwarze Balken immer noch, und wenn ich versuchen und bringen es wieder die tab-Leiste nicht wieder an alle!wv.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
iOS 6
oderiOS 7
und mit spezielle Animations-Blöcke für jeden. Scheint zu funktionieren für unsere Zwecke zumindest. 😀OK Jungs, nach kämpfen mit diesem für etwa zwei Stunden, mein Kollege hat mich gelehrt, den richtigen Weg, es zu tun. Es ist eigentlich eine sehr einfache Lösung, die ich nicht online finden:
nur gesagt :
In der init-Methode Ihre viewController und kommentieren Sie selbst.tabBar.versteckt den zugehörigen code.
Schließlich bekam ich diese zu arbeiten, aber es dauerte eine Weile. Es stammte aus einer Mischung aus meinem ursprünglichen code und einige JRG-Entwickler arbeiten.
In meinem Fall ist das für mein webview, aber theoretisch können Sie ihm jede Sicht. Funktioniert in iOS 6 und 7
}
Ich habe mein problem gelöst in einer solchen Weise.