いつもの話 -- 私は 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];
}
それで、私が見逃している(おそらく単純な)ものを誰か教えてもらえますか?