0

これは私の問題です....

ここに画像の説明を入力

これは、次の場合に発生します。

  1. ボタンを使用してステータスバーをフェードアウトします。
  2. 横向きから逆さまの横向きに 180 度回転します。
  3. ボタンを使用すると、ステータス バーがフェードインします。- ナビゲーション バーを覆うようになりました。

ステータス バーの表示を切り替えるボタン コード:

- (IBAction)toggleBar:(id)sender
{
    NSLog(@"View Frame : %@", NSStringFromCGRect(self.view.frame));

    // Toggle status bar visiblity
    BOOL isStatusBarHidden = [[UIApplication sharedApplication] isStatusBarHidden];
    [[UIApplication sharedApplication] setStatusBarHidden:!isStatusBarHidden
                                            withAnimation:UIStatusBarAnimationFade];
}

ビューは常にそのフレームを 480 x 288 と報告します。

この問題は、スペースを埋める回転を停止することにより、ハックな回避策を使用して iOS 5 で修正できました。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if ([[UIApplication sharedApplication] isStatusBarHidden])
    {
        float oldAlpha = self.navigationController.navigationBar.alpha;
        self.navigationController.navigationBar.alpha = 0.01;
        [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

        double delayInSeconds = 0.0;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            self.navigationController.navigationBar.alpha = oldAlpha;
            [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
        });
    }

    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}

が呼び出されないため、これは iOS 6 では機能しshouldAutorotateToInterfaceOrientationません。ただし、その代わりに使用する:willRotateToInterfaceOrientationも機能しません。何か案は?

4

4 に答える 4

0

電話したら

閉じるViewControllerAnimated

このメソッドを呼び出す

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];

この問題が現れます。

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide]; を呼び出すと、まず、問題ありません。

于 2015-04-09T06:22:51.220 に答える
0

ステータスバーがトグルされた後、self.view.frame を再度設定します。

于 2013-02-05T17:41:20.250 に答える
0

IOS6 では、これらのメソッドを使用する必要があります。これらをチェックしてください。

- (BOOL)shouldAutorotate
{
    //returns true if want to allow orientation change
    return TRUE;
}
- (NSUInteger)supportedInterfaceOrientations
{   
     //decide number of origination tob supported by Viewcontroller.
     return UIInterfaceOrientationMaskAll;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    //from here you Should try to Preferred orientation for ViewController 
}
于 2013-02-05T17:53:08.333 に答える
0

willRotateToInterfaceOrientationわかりました答えは、これは私の質問では機能しないと言ったのと同じハックを使用することでしたが、もう一度試してみたところ、うまくいきました。

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    if ([[UIApplication sharedApplication] isStatusBarHidden])
    {
        [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

        double delayInSeconds = 0.0;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
        });
    }
}
于 2013-02-05T18:37:52.793 に答える