1. ホーム
  2. ios

[解決済み] iOS 7でステータスバーとナビゲーションバーがビューの境界を越えて表示される

2022-03-22 12:33:06

質問

最近ダウンロードした Xcode 5 DP は、iOS 7 で自分のアプリをテストするために使用します。最初に気づいて確認したのは、ステータスバーとナビゲーションバーを考慮して、ビューの境界が常にリサイズされていないことです。

viewDidLayoutSubviews ビューの境界を表示します。

{{0, 0}, {320, 568}}

この結果、私のコンテンツはナビゲーションバーとステータスバーの下に表示されることになります。

メイン画面の高さからステータスバーの高さとナビゲーションバーの高さを引いて、自分で高さを計算することもできるのですが、余計な手間がかかるような気がしています。

どうすればこの問題を解決できますか?

更新してください。

この特定の問題に対する解決策を見つけました。ナビゲーションバーの半透明のプロパティをNOに設定します。

self.navigationController.navigationBar.translucent = NO;

これにより、ナビゲーションバーとステータスバーの下に枠で囲まれたビューが修正されます。

しかし、ナビゲーションバーを半透明にしたい場合の修正方法は見つかっていません。例えば、写真を全画面表示するとき、ナビゲーションバーを半透明にして、その下に枠を付けて表示させたいのです。しかし、ナビゲーションバーの表示/非表示を切り替えると、さらに奇妙な結果になります。最初のサブビュー(UIScrollView)は、その境界のy原点が毎回変更されます。

解決するには?

という新しいプロパティを実装することで、これを実現できます。 edgesForExtendedLayout をiOS7 SDKに追加しました。これを実現するために、以下のコードを追加してください。

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 には、以下のプロパティがあります。

  • edgesForExtendedLayout

edgesForExtendedLayout プロパティは UIRectEdge という型があります。 は、矩形の4つの辺をそれぞれ指定する。 は、noneとallを指定する。使用方法 edgesForExtendedLayout を指定します。 の端は、バーの半透明に関係なく、拡張されます。このため デフォルトでは、このプロパティの値は UIRectEdgeAll .

  • extendedLayoutIncludesOpaqueBars

不透明なバーを使用する場合は、次のように改良します。 edgesForExtendedLayout で を設定します。 extendedLayoutIncludesOpaqueBars プロパティに NO . (のデフォルト値は extendedLayoutIncludesOpaqueBars NO .)

  • 自動的に調整するScrollViewInsets

スクロールビューのコンテンツのインセットを自動的に行わない場合は を設定します。 automaticallyAdjustsScrollViewInsets に変更します。 NO . (この のデフォルト値は automaticallyAdjustsScrollViewInsets はい .)

  • topLayoutGuide, bottomLayoutGuide

topLayoutGuidebottomLayoutGuide プロパティは ビューコントローラのビューにおけるバーの上端あるいは下端の位置。 バーがビューの上部または下部に重なる必要がある場合は Interface Builderでは、バーに対してビューを相対的に配置するために の下部への制約があります。 topLayoutGuide または bottomLayoutGuideです。(どのバーもビューに重ならないようにする場合、底部の topLayoutGuide はビューの上端と同じであり、その上端は bottomLayoutGuide はビューの下部と同じです)。どちらも プロパティが要求されると、遅延して作成されます。

参考にしてください。 アップルドキュメント