Facebookのサイドバーメニューのようなサイドバーメニューのあるアプリがあります。私はこのクラスを使用していますが、うまく機能しSWRevealViewController
ています。iOS7 が登場して以来、ステータスとナビゲーション バーを Facebook アプリのように調整する方法がわかりません。
ご覧のとおり、Facebook アプリでは、ユーザーが画面をスライドしてメニューを開くと、ステータス バーがナビゲーション バーの青色からフェード アニメーション付きの黒色に変わります。私のアプリでは、ユーザーが画面をスライドしてメニューを開くと、青色のステータス バー (NavigationBar が表示されているため青色) がフェードアウトして色が黒に変わることはありません。
また、私が抱えている別の問題は、StatusBar のテキストの色を白に変更できないことです。インターネット上のすべてのコード、すべてのアップルのドキュメントを読んでみましたが、それでも色を変更することはできませんでした。
私もこのコードを使用しました:
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation {
return UIStatusBarAnimationFade;
}
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
- (BOOL)prefersStatusBarHidden
{
return NO;
}
前もって感謝します。
================================================== ======================
更新:@yoeribovenの回答のように、この問題の解決策は、2つのビューを黒色と青色の上に置きSWRevealViewController
、2つをアニメーション化することです。これは素晴らしい解決策であり、うまく機能しました。
したがって、releaveController を作成するときに、2 つの空白の UIView を作成して追加しました。1 つは青、もう 1 つは黒です。そのうちの1つ、黒いものは、今のところ隠しておきました。
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];
使用している場合は、次のコードを使用できますSWRevealViewController
。そうでない場合は、独自にビルドして、メソッドを次のコードに置き換えます。SWRevealViewController.m
#import "AppDelegate.h"
touchesMoved
- (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;
}
}
次に、少し下ってメソッドを検索し、それを次のメソッドrightRevealToggleAnimated
に置き換えます。
- (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];
}
それはトリックを行うはずです、楽しんでください!