Ich habe eine App mit Seitenleiste Menü, ein bisschen wie Facebook Seitenleiste Menü. Ich benutze diese Klasse namens SWRevealViewController
und es funktioniert super. Jetzt da iOS7 herausgekommen ist, kann ich einfach nicht herausfinden, wie ich meine Status- und Navigationsleiste an die Facebook-App anpassen kann.UIStatusBar wie in Facebook neue iOS7 Anwendung
Wie Sie sehen können, wird in der Facebook App, wenn der Benutzer den Bildschirm verschiebt und das Menü öffnet, die Statusleiste von der blauen Navigationsleiste mit Fade-Animation in schwarz wechseln. In meiner App verschiebt der Benutzer den Bildschirm, um das Menü zu öffnen und die Statusleiste mit der blauen Farbe (das ist blau wegen dieser Ansicht NavigationBar) wird nicht verblassen und ändern Sie die Farbe in schwarz.
Auch ein anderes Problem, das ich habe, ich kann einfach nicht die Textfarbe weiß StatusBar ändern. Ich habe alles probiert, jedes Stück Code im Internet, habe alle Apple-Dokumente gelesen, konnte aber die Farbe nicht ändern.
habe ich auch diesen Code:
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation {
return UIStatusBarAnimationFade;
}
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
- (BOOL)prefersStatusBarHidden
{
return NO;
}
Vielen Dank im Voraus.
==============================================
UPDATE: Die Lösung für dieses Problem wie in @yoeriboven Antwort ist es, 2 Ansichten auf Spitze der SWRevealViewController
mit schwarzer Farbe und blauer Farbe und animiere einfach die zwei, das ist eine großartige Lösung und es hat einfach super geklappt.
Also, beim Erstellen der LaibungController habe ich 2 leere UIViews erstellt und hinzugefügt, eine blaue und eine schwarze. Einer von ihnen, der Schwarze, blieb für den Moment verborgen.
self.revealController = [[SWRevealViewController alloc] initWithRearViewController:nil frontViewController:self.frontViewController];
self.revealController.delegate = self;
self.appDelegate.window.rootViewController = self.revealController;
self.statusBarBlack = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.appDelegate.window.frame.size.width, 20)];
[self.statusBarBlack setBackgroundColor:[UIColor blackColor]];
self.statusBarBlue = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.appDelegate.window.frame.size.width, 20)];
[self.statusBarBlue setBackgroundColor:[UIColor blueColor]];
[self.appDelegate.window.rootViewController.view addSubview:self.statusBarBlack];
[self.appDelegate.window.rootViewController.view addSubview:self.statusBarBlue];
Nun, wenn Sie SWRevealViewController
verwenden Sie den nächsten Code verwenden können, wenn nicht, bauen sie einfach auf eigene Faust, innerhalb SWRevealViewController.m
nur #import "AppDelegate.h"
und als Ersatz die touchesMoved
Methode mit dieser:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesMoved:touches withEvent:event];
if (self.state == UIGestureRecognizerStateFailed)
return;
// Change color of status bar by the location of your swipe
AppDelegate *appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
UITouch *currentTouch = [touches anyObject];
CGPoint currentTouchLocationOnWindow = [currentTouch locationInView:appDelegate.window];
appDelegate.splashScreen.blueStatusBar.alpha = currentTouchLocationOnWindow.x/appDelegate.window.frame.size.width;
if (_dragging)
return;
const int kDirectionPanThreshold = 5;
UITouch *touch = [touches anyObject];
CGPoint nowPoint = [touch locationInView:self.view];
CGFloat moveX = nowPoint.x - _init.x;
CGFloat moveY = nowPoint.y - _init.y;
if (abs(moveX) > kDirectionPanThreshold)
{
if (_direction == SWDirectionPanGestureRecognizerHorizontal)
_dragging = YES;
else
self.state = UIGestureRecognizerStateFailed;
}
else if (abs(moveY) > kDirectionPanThreshold)
{
if (_direction == SWDirectionPanGestureRecognizerVertical)
_dragging = YES ;
else
self.state = UIGestureRecognizerStateFailed;
}
}
gehen sie nun ein wenig nach unten und suchen sie nach der Methode rightRevealToggleAnimated
und ersetzen sie mit dieser:
- (void)rightRevealToggleAnimated:(BOOL)animated
{
FrontViewPosition toogledFrontViewPosition = FrontViewPositionLeft;
if (_frontViewPosition >= FrontViewPositionLeft) {
toogledFrontViewPosition = FrontViewPositionLeftSide;
[UIView animateWithDuration:0.3 animations:^{
// Change color of status bar
AppDelegate *appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
appDelegate.splashScreen.blueStatusBar.alpha = 0.0;
}];
} else {
[UIView animateWithDuration:0.3 animations:^{
// Change color of status bar
AppDelegate *appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
appDelegate.splashScreen.blueStatusBar.alpha = 1.0;
}];
}
[self setFrontViewPosition:toogledFrontViewPosition animated:animated];
}
Das sollte genügen, viel Spaß!
Wenn die Statusleiste Stil zu ändern, vergessen Sie nicht, 'setNeedsStatusBarAppearanceUpdate' auf der präsentierten View-Controller aufzurufen. –
Ich rufe das auf der ViewDidLoad-Methode, immer noch das gleiche. –
Ich bin mir nicht sicher, dass dies der richtige Ort ist. Versuchen Sie es in viewDidAppear. –