最近ダウンロードしたエックスコード5 DP を使用して iOS 7 でアプリをテストしました。最初に気づいて確認したのは、ビューの境界がステータス バーとナビゲーション バーを考慮して常にサイズ変更されるわけではないということです。
ではviewDidLayoutSubviews
、ビューの境界を出力します。
{{0, 0}, {320, 568}}
その結果、コンテンツがナビゲーション バーとステータス バーの下に表示されます。
メイン画面の高さからステータス バーの高さとナビゲーション バーの高さを差し引くことで、高さを自分で計算できるのはわかっていますが、それは不必要な余分な作業のように思えます。
この問題を解決するにはどうすればいいでしょうか?
アップデート:
この特定の問題に対する解決策を見つけました。ナビゲーション バーの半透明プロパティを NO に設定します。
self.navigationController.navigationBar.translucent = NO;
これにより、ビューがナビゲーション バーとステータス バーの下にフレーム表示されることがなくなります。
しかし、ナビゲーション バーを半透明にしたい場合の修正方法は見つかりませんでした。たとえば、写真を全画面で表示する場合、ナビゲーション バーを半透明にして、その下にビューをフレーム表示したいとします。これは機能しますが、ナビゲーション バーの表示/非表示を切り替えると、さらに奇妙な結果になりました。最初のサブビュー (UIScrollView) の境界の y 原点が毎回変更されます。
ベストアンサー1
iOS7 SDKで新しいプロパティを実装することでこれを実現できますedgesForExtendedLayout
。これを実現するには、次のコードを追加してください。
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;
メソッドに上記を追加する必要があります-(void)viewDidLoad
。
iOS 7 では、UI のレイアウト方法と外観のカスタマイズ方法にいくつかの変更が加えられています。ビュー コントローラのレイアウト、色合い、フォントの変更は、アプリ内のすべてのUIKitオブジェクトに影響します。さらに、ジェスチャ認識 API の強化により、ジェスチャ操作をより細かく制御できるようになりました。
ビューコントローラの使用
iOS 7 では、ビュー コントローラはフルスクリーン レイアウトを使用します。同時に、iOS 7 では、ビュー コントローラがビューをレイアウトする方法をより細かく制御できます。特に、フルスクリーン レイアウトの概念が改良され、ビュー コントローラがビューの各エッジのレイアウトを指定できるようになりました。
ビュー
wantsFullScreenLayout
コントローラ プロパティは iOS 7 では非推奨です。現在 を指定している場合wantsFullScreenLayout = NO
、ビュー コントローラは iOS 7 で実行したときにそのコンテンツを予期しない画面の位置に表示される可能性があります。ビュー コントローラがビューをレイアウトする方法を調整するために、
UIViewController
次のプロパティが提供されます。
- 拡張レイアウトのエッジ
このプロパティは、none および all を指定するほか、四角形の 4 つの辺それぞれを指定する タイプを
edgesForExtendedLayout
使用します。バーの半透明度に関係なく、ビューのどの辺を拡張するかを指定するために使用します。デフォルトでは、このプロパティの値は です。UIRectEdge
edgesForExtendedLayout
UIRectEdgeAll
- 拡張レイアウトに不透明バーを含める
デザインで不透明なバーを使用する場合は、プロパティもNOに
edgesForExtendedLayout
設定して調整します。( のデフォルト値はNOです。)extendedLayoutIncludesOpaqueBars
extendedLayoutIncludesOpaqueBars
- 自動的にスクロールビューインセットを調整します
スクロール ビューのコンテンツ インセットを自動的に調整したくない場合は、NO
automaticallyAdjustsScrollViewInsets
に設定します( のデフォルト値はYESです)。automaticallyAdjustsScrollViewInsets
- 上部レイアウトガイド、下部レイアウトガイド
プロパティ
topLayoutGuide
とbottomLayoutGuide
プロパティは、ビュー コントローラのビュー内のバーの上端または下端の位置を示します。バーがビューの上端または下端と重なる必要がある場合は、Interface Builder を使用して、topLayoutGuide
bottomLayoutGuide の下部または上部に制約を作成することで、バーを基準としてビューを配置できます。(バーがビューと重ならない場合は、 の下部はtopLayoutGuide
ビューの上部と同じになり、 の上部はbottomLayoutGuide
ビューの下部と同じになります。) 両方のプロパティは、要求されたときに遅延作成されます。
ご参照ください、アップルドキュメント