8

いつもの話 -- 私は iOS 5/6 アプリを iOS 7 で実行するようにしていますが、ナビゲーション バーの動作の変更が問題を引き起こしています。

このアプリは、iOS 7 のデフォルトのように、フルスクリーン ビューとビューの「上」にある半透明のナビゲーション バーで既に機能していました。問題は、ナビゲーション バーを非表示/非表示にすると、iOS 7 で異なる動作が発生することです。iOS 5/6 では、ナビゲーション バーを非表示/非表示に変更してもビューは変わりません。iOS 7 では、バーを非表示にするとビューが視覚的に上に移動し、画面の下部に空白のバーが残ります。バーを非表示にすると、ビューが下に移動して全画面を占有します (もちろん、ナビゲーション バーが上部に表示されます)。

iOS 5 を引き続きサポートする必要があるため、自動レイアウトは使用しませんが、全画面表示は使用します。ズーム可能な画像を表示しているビューがあるため、ビュー コントローラーには、imageView を含む scrollView を含むフルスクリーン ビューがあります。

ステータスバーは常に非表示です。

ナビゲーションコントローラーを介してビューコントローラーにアクセスするため、フルスクリーンビュー/スクロールビュー/イメージビューの上部にある(黒の半透明の)ナビゲーションバーがあります。

少し遅れて、一部のオーバーレイ ラベルがフェードし、ナビゲーション バーが非表示になります。1 回のタップでオーバーレイ ラベルが復元され、ナビゲーション バーが非表示に戻ります。これは iOS 5/6 で機能します。ナビゲーション バーが画面の上部からスライドして、ビュー/画像の上部が見えなくなります。

iOS 7 では、ナビゲーション バーが画面の上部から滑り落ちると、ビュー全体が視覚的に対応する量 (つまり 44 ポイント) 上に移動し、画面の下部に黒いバーが残ります。これは、トップレベル ビューに背景色を設定し、背景が見えるようにスクロール ビューのサイズを変更することで確認できます。ビューの上部は実際に画面外に移動し、背景色は画面の下部 (44 ポイント) には描画されません。

しかし、self.view.frame は変更されず、{0, 0} 320 x 高さのままです。

シングルタップしてオーバーレイ情報とナビゲーション バーを復元すると、ビューが下に移動して全画面を占有し、半透明のナビゲーション バーがビュー/画像の上に表示されます。

私が試したことは何もありません:IBビューコントローラーのレイアウトコントロールを変更します(トップバーの下、ボトムバーの下、スクロールビューのインセットを調整します)。5.1、6.1、および 7.0 用のビルドはすべて、7.0 で実行すると同じ結果になります。

self.edgesForExtendedLayout = UIRectEdgeNone

何もしません。レイアウト デルタ値を使用しても何も起こりません。IB では、iOS 7 および iOS 6 以前で「表示」した場合、ビューは同じように見えます。多くのデバッグ情報を出力しますが、ビューが「画面外」に移動しても、ビュー (またはスクロール ビュー) については何も変化しないようです。

オーバーレイ情報を表示するコード (ビューが最初に表示され、シングルタップで実行される) は次のとおりです。

- (void) showOverlayInfo {
    self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
    [[[self navigationController] navigationBar] setTranslucent:YES];
    [[self navigationController] setNavigationBarHidden:NO animated:NO];    

    overlayInfoHidden = NO;
    overlayInfoFading = NO;
    self.infoButton.hidden = NO;
    self.infoButton.alpha = 1;
    self.descriptionLabel.hidden = NO;
    self.descriptionLabel.alpha = 1;
}

オーバーレイ情報を非表示にするコードは次のとおりです。

- (void) hideOverlayInfo {
    overlayInfoHidden = YES;
    overlayInfoFading = NO;
    self.infoButton.hidden = YES;
    self.descriptionLabel.hidden = YES;
    [[self navigationController] setNavigationBarHidden:YES animated:YES];
}

それで、私が見逃している(おそらく単純な)ものを誰か教えてもらえますか?

4

1 に答える 1

11

私はついに自分の問題を見つけました。

重要な事実は、画像ビューアーのビュー コントローラーが UIPageViewController にあるということです。そのため、私が見て実験していたのは、実際には別のビュー コントローラーの "内部" でした。画像ビューアー VCのビュー コントローラー設定[スクロール ビュー インセットの調整]を無効にしましたが、UIPageViewController を作成し、UIPageViewController が UIScrollView のサブクラスでページを表示する包含 VC に対しては無効にしていませんでした。親 VC 用に変更すると、問題はなくなりました。

したがって、この話の教訓は次のとおりだと思います。

  • 重要なコンテキストが欠落している可能性があるため、ローカルが機能しない場合は、問題をよりグローバルに考えてください。
  • iOS 7 の動作を使用したくない場合は、お持ちのすべてのビュー コントローラーの設定を変更してください。
于 2013-11-06T01:14:33.170 に答える