1

私のアプリは数年間正常に動作していますが、iOS 6 のリリースでいくつか問題が発生しており、そのうちの 1 つは StatusBar の向きの問題です。

私のアプリはどちらの横向きでも動作しますが、2 つの向きのいずれかでステータス バーの幅だけタッチが垂直方向にずれていました。直観的には、回転中にステータス バーの画像が適切に再配置されたにもかかわらず、ステータス バーの論理的な位置が変更されず、画面の反対側でのタッチが消費されているように見えました。

私のInfo.plistファイルでは、「UIStatusBarHidden」がFALSEに設定されていました。アプリ デリゲートの "didFinishLaunchingWithOptions" 関数で、独自のカスタム ViewController を作成し、それをウィンドウの RootViewController として設定しました。これは iOS 6 より前では機能していましたが、この時点で StatusBar が新しい RootViewController に「転送」されていないと思います。

iOS 6 より前は、向きの変更が OLD RootViewController に伝達され、向きが期待どおりに機能したため、コードが機能したと理論付けました。iOS 6 は NEW RootViewController を超えて向きを伝達しなくなったため、OLD コントローラー (「論理的に」StatusBar を含んでいた) は更新されませんでした。

注: 私のアプリには .XIB ファイルがなく、この時点まで明示的に RootViewController を作成しません。しかし、とにかく、デフォルトのものは舞台裏で私のために作成されたと思います.

私の「解決策」は、Info.plist ファイルで「UIStatusBarHidden」を TRUE に設定し、カスタム RootViewController を設定した後で、コードで手動で FALSE に設定することでした。これは機能しているように見えますが、実際の問題ではなく、症状に対処した可能性があります。

StatusBar 以外の他のものは、その古い/暗黙の RootViewController に論理的に結び付けられている可能性があり、それらも新しいものに「転送」されていないため、副作用についても心配しています。

StatusBar や RootViewController で同様の経験をした人はいますか? このアプローチは問題ありませんか、それともデフォルト/暗黙の RootViewController をそのままにして、何らかの形で ViewController を子として追加する必要がありますか? 2 年前に最初にコードを書いたときはうまくいかなかったようで、それが現在の実装につながっています。

以下は、質問のコードのハイライトです。アドバイスをいただきありがとうございます。

-BT

// ******** Info.plist value *********
<key>UIStatusBarHidden</key>
<true/>


// ******** App Delegate **********
- (BOOL)application : (UIApplication *)application didFinishLaunchingWithOptions : (NSDictionary *)launchOptions
{
    CGRect rect = [[UIScreen mainScreen] applicationFrame];
    rect.origin.x = 0;  rect.origin.y = 0;
    self.window = [[[UIWindow alloc] initWithFrame:rect] autorelease];

    self.gameViewController = [[[GameViewController alloc]init] autorelease];
    self.gameView = [[[GameView alloc] initWithFrame:rect] autorelease];
    [self.gameViewController.view addSubview : self.gameView];
    [self.window setRootViewController:self.gameViewController];

    // Setting it now attaches it to our actual RootViewController instead of the
    // "phantom" controller created under the hood?
    [UIApplication sharedApplication].statusBarHidden = NO;

    // ...
}
4

0 に答える 0