1

これは本当に奇妙で、一体何が起こっているのかわかりません。

iPad アプリに UISplitViewController があります。縦向きから横向きに何度も回転でき、期待どおりに機能します。ただし、縦向きでボタンをタップしてUISplitViewControllerの左側を含むポップオーバーを表示し、表示中に回転すると、回転が完了すると左側のテーブルがプッシュされますとナビゲーション バーの間に黒い隙間を残します。

何が原因でしょうか?

-willRotateToInterfaceOrientation:durationメソッドとメソッドをコメントアウトしました-didRotateFromInterfaceOrientation:が、問題はまだ存在するため、ローテーション コードが原因ではありません。(そのコードは、そのポップオーバーを明示的に閉じていました)。

問題を引き起こす回転の後、フレームサイズとともに左側のビュー階層を再帰的に出力しました。

UILayoutContainerView ({{0, 0}, {320, 748}})
     UINavigationBar ({{0, 0}, {320, 44}})
     UILayoutContainerView ({{0, 37}, {320, 711}})
         UINavigationTransitionView ({{0, 0}, {320, 711}})
             UIViewControllerWrapperView ({{0, 44}, {320, 667}})
                 UIView ({{0, 0}, {320, 667}})
                     UITableView ({{0, 0}, {320, 667}})

ナビゲーションバーの高さは 44 ピクセルで、左側のビュー コントローラーを保持するビュー コンテナーは 0,44 から始まり、テーブルビューは 0,0 から始まりますが、それよりも短いことがわかります...なぜそれが正しく表示されません。

横向きの場合は次のようになります。左側に、テーブル セクション ヘッダー「What do you want to know?」が表示されます。「電卓に切り替える」ボタンのあるナビゲーションバーのすぐ下にあります。

ここに画像の説明を入力

縦向きに切り替えて、「何を知りたいですか?」をタップすると、ボタンをクリックすると、左側のナビゲーション コントローラーと UITableViewController を含むポップオーバーが表示されます。

ここに画像の説明を入力

ここで、回転して横向きに戻すと、ナビゲーション バーと UITableView の間に黒い隙間が表示されます。

ここに画像の説明を入力

4

1 に答える 1

0

昨年、このアプリの作業中にこれと非常によく似た問題が発生したことを思い出しましたが、それに関する古い StackOverflow の投稿を見つけることができませんでした。ただし、ポートレート モードのときにポップオーバー内にナビゲーション バーを含めた (というか、表示できるようにした) 何らかの理由があったことを思い出しました。審美的な目的のために、私はそれを横向きに表示したいのですが、縦向きのポップオーバーには表示されないようにしました..そして、それを含めた理由は、この問題を解決するように見えたからです.

iOS の奇妙なバグのように見えましたが、Nav Bar を表示すると両方の状況で修正されたようです。そこで、私が本当に望んでいた方法に戻すことにしました。横向きでは見える、縦向きでは見えません...そしてBAMです。黒い隙間が消えます。そのため、奇妙なバグがまだ残っているようですが、現在は逆に機能しています。

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

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        UIDeviceOrientation deviceOrientation = [UIApplication sharedApplication].statusBarOrientation;
        BOOL isPortrait = UIDeviceOrientationIsPortrait(deviceOrientation);

        if (isPortrait) {
            self.navigationController.navigationBarHidden = YES;
        } else {
            self.navigationController.navigationBarHidden = NO;
        }
    }
}
于 2013-01-30T01:02:38.537 に答える