こんにちは開発者仲間、
IOS 8の特定のユースケースに関する情報が見つからなかったことに驚いています。説明しましょう。ナビゲーションコントローラースタックがあります。プッシュされ、戻るには、このビューに表示されるナビゲーションバーが必要です(明らかに)。 iOS 7では、viewWillAppearに次の行を追加するだけでした。
[self.navigationController setNavigationBarHidden:NO animated:YES];
そして、それは魅力のように機能します。しかし、iOS 8の時点で、私は同じ動作をするのに苦労しています。今のところ、私は以下を使用して同じことを行うことができました:
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
[self.navigationController setNavigationBarHidden:NO animated:NO];
}
- (void)viewDidLoad {
[super viewDidLoad];
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
self.automaticallyAdjustsScrollViewInsets = NO;
self.edgesForExtendedLayout = UIRectEdgeNone;
self.collectionView.contentInset = UIEdgeInsetsMake(self.navigationController.navigationBar.frame.size.height, 0, 0, 0);
} }
そして、私が表示する必要があるものは何でも、私のcollectionsView/tableviewsのcontentInsetを変更します。それは動作しますが、*での苦痛です(ユーザーが新しいViewControllerから来た場合、コンテンツのインセットは必要ない場合があります)。
コンテキストのために、プロジェクトは最初にiOS 6および7を処理するために開発されたため、ストーリーボードはなく、すべてプログラムで行われます。私はアプリをより新しいコードベースに移植し、ユニバーサルにしました。
私は何かが欠けていますか? iOS 7/8でそれを処理するより良い方法はありますか?
viewWillAppear
で非表示にし、viewWillDisappear
で再び表示したい
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.navigationBar.isHidden = true
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.navigationBar.isHidden = false
}
これをアニメーション化して、スムーズな移行を実現します。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
私はラインがだと思った:
self.navigationController.navigationBar.hidden = YES;
私はそれをチェックし、それは私のためにうまく機能しています。 。 。それを試してみてください 。 。 。
iOS 8
では、navigationBarHidden
はnavigationBar.hidden
と同じではないようです。 (私は展開ターゲットiOS 6
で構築しています-これが違いを生むかどうかわかりません)。
私のコードでは、次のconsecutive行でデバッガーを見ています:
bool b1 = self.navigationController.navigationBarHidden; // FALSE
bool b2 = self.navigationController.navigationBar.hidden; // TRUE
b1
はfalse、b2
はtrueとして表示されます。
self.navigationController.navigationBar.hidden = false
を設定すると問題が解決します
私は同じ問題を抱えていて、実際にすべてを試しましたが、ナビゲーションバーは表示されませんでした。最後に、最初のView Controllerにこのコードがあることに気付きました:-)
[self.navigationController setNavigationBarHidden:YES];
この質問をチェックする他の誰かが私の間違いをしたと思ったので、言及する価値があると思いました。
複数のテクニックがあります。摩擦が少ないのは:
open class ViewController: UIViewController {
open var hidesNavigationBarWhenPushed = false
override open func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(hidesNavigationBarWhenPushed, animated: animated)
}
}
しかし、それはあなたにこれを与えるでしょう result 。
または、新しく構築した HidesNavigationBarWhenPushedライブラリ を使用することをお勧めします。 ここに説明があります それがどのように機能し、なぜ私がそれを構築したのか。