web-dev-qa-db-ja.com

ビューがUINavigationBar iOS 7の下に隠れました

以前は、プロジェクトにiOS 6.1を使用していました。最近、iOS 7に切り替えました。多くの変更を知っていたため、コードを更新しました。しかし、奇妙な動作を観察しました。すべての画面の私のビューは、ナビゲーションバーの下に隠れます。ビューの位置を変更すると、iOS7の問題は解決しますが、古いiOSバージョンでは問題が発生します。

誰も私に説明できますか、その理由は何ですか?この問題を引き起こしているiOS 7の変更点は何ですか??

助けていただければ幸いです。

61
Salman Zaidi

navigationBar.translucent = NO;、iOS7ではデフォルトでYESです。

UINavigationBarドキュメントのこの部分を見てみるのもいいでしょう:

IOS 7の新しい動作。デフォルトはYESです。プロパティをNOに設定すると、背景を不透明にすることができます。ナビゲーションバーにカスタム背景画像がある場合、デフォルトは画像のアルファ値から推測されます。アルファ<1.0のピクセルがある場合はYESになります。不透明なカスタム背景画像を持つバーにsetTranslucent:YESを送信すると適用されます画像に対するシステムの不透明度が1.0未満。 setTranslucent:NOを半透明のカスタム背景画像を持つバーに送信すると、定義されている場合はバーのbarTintColorを使用して画像の不透明な背景を提供します。

編集

'navigationBar.translucent'値を設定すると、古いiOSバージョンのデバイス/シミュレーターでプロジェクトを実行する場合に例外が発生します。

したがって、次のようなバージョンチェックを追加できます。

float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (systemVersion >= 7.0)
{
    navigationBar.translucent = NO;
}

別のオプションは以下を設定することです:

vc.edgesForExtendedLayout = UIRectEdgeNone;

Swift

vc.edgesForExtendedLayout = []
124
null

ViewControllerのナビゲーションバーの下に表示されるビューを停止できます。

self.edgesForExtendedLayout = UIRectEdgeNone;
44
Daniel Broad

Swift 3 +:

self.edgesForExtendedLayout = []
20
David Seek

アプリに半透明のナビゲーションバーが必要ない場合は、コードを変更せずにiOS7およびiOS6でこれを修正できます。

ストーリーボードで、Navigation Controllerを選択し、「Attributes Inspector」を開きます。次に、「シミュレートされたメトリック」の下で、「トップバー」を「半透明」ではなくある値に設定します。

Setting Top Bar style

これで、iOS6およびiOS7でのビューの配置が以前と同じになります。

11
gladimdim

このリスト のポイント#7がトリックを行います。 @nullの答えのように、iOS 7チェックコードでそれをラップする必要があります。

float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (systemVersion >= 7.0) {
    viewController.edgesForExtendedLayout = UIRectEdgeNone;
}

記事全体は、iOS 7に移行するユーザーにとって役立ちます。

9

VCにこのプロパティを使用して、VC Swift:

self.edgesForExtendedLayout = []

客観的C

self.edgesForExtendedLayout = UIRectEdgeNone;
5
Aks

次のキーを検索します:UIViewControllerBasedStatusBarAppearance

アプリの情報PLISTファイルで使用され、次のように表示されます。

コントローラーベースのステータスバーの外観を表示する

これにより、ステータスバーの外観を制御できます。ステータスバーにはAPIの変更が多数あります。次のような新しいUIViewControllerメソッドのドキュメントをご覧ください。

- (void)prefersStatusBarHidden;

3
Guy Kogus

Swift 2.2、使用

self.edgesForExtendedLayout = .None
2
matthew

私にとって透過的なNavigation Barは、バーのshadowImageとbackgroundImageを変更します。

navigationController?.navigationBar.isTranslucent = true
navigationController?.navigationBar.backgroundColor = nil
navigationController?.navigationBar.setBackgroundImage(UIImage(named: "navBarBackground")?.resizableImage(withCapInsets: .zero, resizingMode: .stretch), for: .default)  
navigationController?.navigationBar.shadowImage = UIImage()
0
saltwat5r