私のアプリの(簡略化された)構造は次のとおりです。
UITabBarController
は、1つのUINavigationController
を保持し、UITableViewController
をルートビューコントローラーとして保持します。
テーブルビューコントローラーセルの1つをタップすると、通常のUIViewController
(VCと呼びます)を押して、最後のタブバーを非表示にします。 (「プッシュ時に下部バーを非表示にする」フラグを使用)
ストーリーボードでは、通常のUIView
サブクラスをVCに追加します。これは下部バーのように見えます。自動レイアウトを使用して、VCビュー。
問題
プッシュVCこのビューが下部に固定されるまでに1秒かかります。自動レイアウトでは、タブバーが非表示になっていないように下部に固定されます。しばらくすると、タブバーが非表示になっていることが認識され、ビューの真下に移動します。
私はそれが最良の説明ではないことを知っているので、問題を示すために 非常に単純なプロジェクト を追加しました。
問題は、ビューと下部レイアウトガイドの上部の間にあるこの特定の制約にあります。
制約を選択し、その「Second Item」プロパティを編集します
ここで下を選択する必要があります
それができたら、ピンクのビューはレイアウトガイドの影響を受けなくなります。レイアウトガイドは、プッシュされたView Controllerのルートビューがメイン画面の境界内にある場合にのみTab Barが非表示になることを認識しており、これはアニメーションが終了したときにのみ発生します。
そして、それがビューの階層を再度レイアウトする必要がある理由であり、それが不要なアニメーションを引き起こします。
受け入れられた答えは私にはうまくいきませんでした(オプションは利用できませんでした)。しかし、別の解決策を見つけました。 ( 自動レイアウトでプッシュされたときに下部バーを非表示にする )に基づく
ビューと整列するオブジェクト(この場合はbtnShare)を選択し、新しい整列制約(ボトムエッジ)を追加します。
こんにちは、ストーリーボードでTabバーを選択し(Tab Bar Controller Scene> Tab Bar Controller> Tab Bar)、属性インスペクターでTranslucentボックスをオフにします。このアクションは問題を修正します。 (ただし、「プッシュ時に下部バーを隠す」はツールバーにあります)。
「Navigation Controller」を選択し、「Attribute Inspector」で「Under Bottom Bars」からチェックマークを外します。
タブバーを非表示にする場合は、このコードをコントローラーに追加して、
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.tabBarController.tabBar.hidden = YES;
}
また、タブバーを表示するコントローラーにそのコードを配置する必要があります(ただし、NOを渡します)。また、IBの[プッシュ時に下部バーを隠す]ボックスの選択を解除する必要があります。
編集後:
最初のコントローラーで、非表示でないタブバーのアルファ値を短時間で0から1にアニメーション化すると、より良いアニメーションが得られます。これは、戻るボタンで戻る場合によく見えます。スワイプバックを使用する場合は、interactivePopGestureRecognizerを使用してより複雑な操作を行う必要があります。
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.tabBarController.tabBar.hidden = NO;
self.tabBarController.tabBar.alpha = 0.0;
[UIView animateWithDuration:.4 animations:^{
self.tabBarController.tabBar.alpha = 1.0;
}];
}
uINavigationBar TranslucentをNOに設定します。
このような: self.navigationController.navigationBar.translucent = NO;
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.tabBarController.tabBar.hidden = NO;
self.tabBarController.tabBar.alpha = 0.0;
[UIView animateWithDuration:.3 animations:^{
self.tabBarController.tabBar.alpha = 5.0;
}];
}
ビューの下部をスーパービューの下部に固定し、下部のレイアウトを固定しないでください