以前は、プロジェクトにiOS 6.1を使用していました。最近、iOS 7に切り替えました。多くの変更を知っていたため、コードを更新しました。しかし、奇妙な動作を観察しました。すべての画面の私のビューは、ナビゲーションバーの下に隠れます。ビューの位置を変更すると、iOS7の問題は解決しますが、古いiOSバージョンでは問題が発生します。
誰も私に説明できますか、その理由は何ですか?この問題を引き起こしているiOS 7の変更点は何ですか??
助けていただければ幸いです。
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 = []
ViewControllerのナビゲーションバーの下に表示されるビューを停止できます。
self.edgesForExtendedLayout = UIRectEdgeNone;
Swift 3 +:
self.edgesForExtendedLayout = []
アプリに半透明のナビゲーションバーが必要ない場合は、コードを変更せずにiOS7およびiOS6でこれを修正できます。
ストーリーボードで、Navigation Controllerを選択し、「Attributes Inspector」を開きます。次に、「シミュレートされたメトリック」の下で、「トップバー」を「半透明」ではなくある値に設定します。
これで、iOS6およびiOS7でのビューの配置が以前と同じになります。
このリスト のポイント#7がトリックを行います。 @nullの答えのように、iOS 7チェックコードでそれをラップする必要があります。
float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (systemVersion >= 7.0) {
viewController.edgesForExtendedLayout = UIRectEdgeNone;
}
記事全体は、iOS 7に移行するユーザーにとって役立ちます。
VCにこのプロパティを使用して、VC Swift:
self.edgesForExtendedLayout = []
客観的C
self.edgesForExtendedLayout = UIRectEdgeNone;
次のキーを検索します:UIViewControllerBasedStatusBarAppearance
。
アプリの情報PLISTファイルで使用され、次のように表示されます。
コントローラーベースのステータスバーの外観を表示する
これにより、ステータスバーの外観を制御できます。ステータスバーにはAPIの変更が多数あります。次のような新しいUIViewController
メソッドのドキュメントをご覧ください。
- (void)prefersStatusBarHidden;
Swift 2.2、使用
self.edgesForExtendedLayout = .None
私にとって透過的な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()