0

ios7 でアプリを実行しているときに、子ビュー コントローラーの起点が親ビュー コントローラーのナビゲーション バーの下にあることに気付きましたが、ios6 ではそうではありませんでした。

これは、子ビュー コントローラーを追加するときに使用しているコードです。

- (void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if (!self.selectionBarViewController) //self.selectionBarViewController is the child view controller
    {

        self.selectionBarViewController = [[UCIScrollSelectionBarViewController alloc] init];

        self.selectionBarViewController.view.frame = CGRectMake(0.0f,
                                                                0.0f,
                                                                self.view.frame.size.width,
                                                                44.0f);

        self.selectionBarViewController.dataSource = self;
        self.selectionBarViewController.delegate = self;

        [self addChildViewController:self.selectionBarViewController];
        [self.view addSubview:self.selectionBarViewController.view];
        [self.selectionBarViewController didMoveToParentViewController:self];

        [self.selectionBarViewController beginAppearanceTransition:YES
                                                          animated:YES];

    }

    //More set up code here

}

子View Controllerのフレームを調整すると、それを見ることができますが、理想的には、ユーザーがiOS 6または7からアプリを実行している場合、条件付きレイアウトコードを持ちたくありません.

4

1 に答える 1

2

理由は簡単です。ナビゲーション バーの半透明プロパティの既定値です。

iOS 6.1 まではデフォルト値は NO でしたが、iOS7 以降ではデフォルト値は YES です。

半透明のナビゲーション バーは、トップ ビュー コントローラーのビューの上に配置されますが、半透明でないナビゲーション バーは、それに応じてビュー コントローラーのビューのサイズを変更します。

あなたの質問に答えるには、 を手動で設定するかnavigationBar.translucent = NO、半透明のままにしたい場合は、それに応じてレイアウトを調整する必要があります。

于 2013-09-20T10:30:37.543 に答える