27

Apple が最近リリースした Remote アプリで、ナビゲーション バーの動作が独特であることに気付きましたが、再現できませんでした。Now Playing ビュー コントローラーをポップすると、Now Playing ビュー コントローラーのナビゲーション バーは透明のままになり、ライブラリ ビュー コントローラーのナビゲーション バーも半透明のままになります (スクリーンショット 1)。彼らが 2 つのナビゲーション コントローラーを使用しているか、1 つだけを使用しているかを把握しようとしています。個人的には、2 つの理由から 1 つだけを使用していると感じています (1) インタラクティブなポップ ジェスチャが有効になっている。(2) ライブラリ ビュー コントローラーの [再生中] ボタンを押すと、現在再生中の画面が「ビュー コントローラーのプッシュ」アニメーションを終了する直前に、ナビゲーション バーが透明になります (スクリーンショット 2)。これは、View Controller (ナビゲーション バーを透明に設定する) を押したときに発生する動作です。だから私の質問は次のとおりです。Appleは2つのView Controllerの両方のナビゲーションバーを個別に(スクリーンショット1のように)どのように表示しますか、バーボタン、ナビゲーションタイトルなどでさえ、切り替え時に100%不透明になります(通常は前のView Controllerのボタンとタイトルを押す/ポップすると、新しいコントローラーが押されるにつれてフェードします)。バーの色合いをいじってみました 切り替え時の不透明度は 100% です (通常、ボタンを押したりポップしたりすると、新しいコントローラーが押されると、前のビュー コントローラーのタイトルがフェードします)。バーの色合いをいじってみました 切り替え時の不透明度は 100% です (通常、ボタンを押したりポップしたりすると、新しいコントローラーが押されると、前のビュー コントローラーのタイトルがフェードします)。バーの色合いをいじってみましたviewDidAppearおよびviewWillAppear両方のView Controllerで同じ動作を再現できず、バーボタンのフェードを防ぐことはできません。

まあ、これをうまく説明したといいのですが、考えただけで混乱します!

スクリーンショット 1 (ポッピング): スクリーンショット 1

スクリーンショット 2 (プッシュ): スクリーンショット 2

4

2 に答える 2

37

確認のためにアプリケーションをダウンロードしました。2 つの異なるナビゲーション バーが使用されます。これは、インタラクティブな pop ジェスチャを使用して確認できます。下部のビュー コントローラーのナビゲーション バーがスライドして出入りする様子に注目してください。通常のプッシュおよびポップ トランジションでは、ナビゲーション アイテムは既存のバーでフェード インおよびフェード アウトしますが、バーは静止しています。これは、現在再生中のビュー コントローラーが押されるまでに発生することです。

よく見ると、再生中のビュー コントローラーのアニメーション中に、下部のナビゲーション バーが消えていることがわかります。

UIKit の動作に関する私の経験とアプリで見たものから、次のことが起こると思います。

album_vc= 下部、リスト ビュー コントローラー nowplaying_vc= 上部のビュー コントローラー

  • nowplaying_vcの_viewWillAppear:

    • を使用して、ナビゲーション バーを非表示に設定し[self.navigationController setNavigationBarHidden:YES animated:YES];ます。これはアニメーション ブロック内にあるため、プッシュ アニメーション中にナビゲーション バーがスライドします。
    • ステータス[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;バー スタイルの遷移にアニメーションがないことに注意してください。白くなるだけです。
  • nowplaying_vcの_viewWillDisappear:

    • を使用して、ナビゲーション バーを表示するように設定し[self.navigationController setNavigationBarHidden:NO animated:YES];ます。これはアニメーション ブロック内にあるため、ポップ アニメーション中にナビゲーション バーがスライドインします。
    • 再度設定[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;します。インタラクティブなポップ ジェスチャ中に、ステータス バーがアニメーションなしで変化することに注目してください。

のナビゲーション バーの透明な外観を実現するには、 で空のイメージ ( ) をnowplaying_vc使用できます。[UIImage alloc]setBackgroundImage:forBarPosition:barMetrics:

アプリケーションは回転しないため、上のナビゲーション バーnowplaying_vcが別のナビゲーション コントローラーの一部なのか、それとも上の位置にある単なるナビゲーションバーなのかはわかりませんUIBarPositionTopAttached。わかっている限りでは、そこにはナビゲーション バーすらなく、バック シェブロン イメージ ビューのみがあります (バック バー ボタンはイメージ ビューとボタンで構成されています)。

ステータス バーのスタイルが で変更されたのは、インタラクティブ ポップ ジェスチャー中に不自然な感じがしたためだと思いviewWillAppear:ますviewWillDisappear:。アニメーション化されたトランジションを使用することをお勧めします。または、システムが自動的にトランジションをアニメーション化する新しいビュー コントローラー ベースのステータス バー スタイルを使用することをお勧めします。


最新の API の更新:

およびの暗黙的なアニメーションに依存するのではなく、animateAlongsideTransition:completion:またはAPIを使用する必要があります。animateAlongsideTransitionInView:animation:completion:viewWillAppear:viewWillDisappear:

于 2013-12-28T17:49:27.400 に答える
3

ナビゲーション バーを非表示にして表示する代わりに、ナビゲーション バーのアルファを更新できます。遷移中はスムーズにアニメーション化されます。透明なナビゲーション バーを持つビュー コントローラーの場合、ナビゲーション バーを変更する代わりに、2 番目のコントローラーのビューで手動でナビゲーション バー (または戻るボタンとタイトルなど) を作成します。次に、最初のビュー コントローラーから 2 番目のビュー コントローラーに移行するときに、ナビゲーション バーを非表示にします。

最初のコントローラviewWillDisappearと 2 番目のビュー コントローラでviewWillAppear:、 を使用してナビゲーション バーのアルファをゼロに設定しますself.navigationController.navigationBar.alpha = 0;。これはアニメーション ブロック内にあるため、プッシュ アニメーション中にナビゲーション バーが非表示になります。

viewWillAppear最初のコントローラーと 2 番目のコントローラーでアルファを 1 に戻しviewWillDisappearます。

于 2015-01-09T16:27:55.540 に答える