1

iOS 6 を使い始めてから問題が発生しているようですが、iOS 5 では表示されません。最初はシミュレーターのバグかと思っていましたが、今日 iPhone 5 でテストしてからわかりました。シミュレータだけではありません。

私はすべてをプログラムで作成しています — 私はその方法を好むようです (HTML/CSS の経験があるためだと思います!) — しかし、私はまだ Objective-C にかなり慣れていないため、完全な例を見つけることができませんでした。ナビゲーション コントローラー/テーブル ビューをプログラムで設定する方法について説明したので、見つけた情報のナゲットからまとめました。したがって、根本的に間違ったことをしている可能性があります。ただし、iOS 5 では完全に機能します (そして今でも機能します)。

問題は、ナビゲーション バーとテーブル ビューの間に黒いバーがあることですが、奇妙なことに、ビューをプッシュして元のビューに戻ると、バーが消え、完全に再起動するまで再表示されません。アプリ。

次の画像は、(2) でビューをプッシュしているため、起動時のアプリ (1) と、元のビューに戻った後のアプリ (3) です。

これは私のコードとして持っているものです:

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    RootViewController *rootController = [[RootViewController alloc] init];
    self.window.rootViewController = rootController;

    self.navigationController = [[UINavigationController alloc] initWithRootViewController:rootController];
    [self.window addSubview:navigationController.view];

    [self.window makeKeyAndVisible];

    NSLog(@"Window frame: %@", NSStringFromCGRect(self.window.frame));

    return YES;
}

RootViewController.m

- (void)loadView
{
    self.title = @"Title";

    self.tableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] bounds] style:UITableViewStylePlain];
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    self.view = self.tableView;

    NSLog(@"tableView frame: %@", NSStringFromCGRect(self.tableView.frame));

    UIBarButtonItem *newViewButton = [[UIBarButtonItem alloc] initWithTitle:@"New View"
                                                                  style:UIBarButtonItemStylePlain
                                                                 target:self
                                                                 action:@selector(newViewButtonTapped:)];
    [self.navigationItem setRightBarButtonItem:newViewButton animated:NO];
}

NSLogs を追加して、役立つ情報が表示されるかどうかを確認しました。出力は次のとおりです。

tableView frame: {{0, 0}, {320, 480}}
Window frame: {{0, 0}, {320, 480}}

誰かが私が間違っていることについて何か考えを教えてもらえますか? 似たような/同じ問題が発生しているようです (黒いバー オーバートップ ナビゲーション バー— コメント内) が、答えが見つかりませんでした。

前もって感謝します!

4

1 に答える 1

5

RootViewController をウィンドウに 2 回追加しています。1 回目は UIWindow.rootViewController を設定して (これは内部で行います[window addSubview:rootViewController.view])、もう 1 回はナビゲーション コントローラーのサブビューとして追加します。

あなたはこれをしているはずです:

RootViewController *rootController = [[RootViewController alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:rootController];
self.window.rootViewController = navigationController;

経験則として、実際に必要であることがわかっている場合を除き、ビューをウィンドウに直接追加しないでください。

于 2012-09-22T23:05:18.970 に答える