uinavigationbarの自動化
-
30-09-2019 - |
質問
私のアプリでは、uinavigationControllerを入手しました。残念ながら、デバイスを回転させてインターフェイスの向きを変えると、UinavigationBarはその高さを変えません。 contacts.appなどの他のiPhoneアプリケーションでは、ナビゲーションバーの高さがランドスケープモードでわずかに少なくなります。 Xcodeメニューからナビゲーションサンプルアプリを取得し、インターフェイスの向きを追加すると、ナビゲーションバーの高さが適切に変更されるため、組み込む必要があります。
私が見た他のすべてのiPhoneアプリのように、ナビゲーションバーをサイズ変更するにはどうすればよいですか?
解決
私は少しテストしましたが、この方法は好きではありませんが、非常に簡単です。
うまくいったかもしれないプライベートな方法を探していたので、私はそれを見つけることができませんでした。私が見つけたのは:
@property BOOL forceFullHeightInLandscape;
- (BOOL)isMinibar;
セッターはありません -isMinibar
, 、だから私たちはそれを設定することはできません。高さに基づいて値を返すと思います。また、 forceFullHeightInLandscape
に設定されていました NO
, しかし、それでも高さを調整しませんでした。
変更中 autoresizingMask
含める UIViewAutoresizingFlexibleHeight
, 、 景色 やりました サイズは小さくなりますが、今では小さすぎました。でも、 -isMinibar
突然戻ってきた YES
. 。そのため、ビューをサイズ変更し、適切な高さに合わせて調整するだけで考えさせられました。
そこで、プライベートAPI呼び出しがなくても機能する方法です。
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[self.navigationBar performSelector:@selector(sizeToFit) withObject:nil afterDelay:(0.5f * duration)];
}
対処しなければならないことの1つは、バーの下のビューが小さなバーに調整されないため、以下のバーとビューの間にギャップがあることです。これを解決する最も簡単な方法は、コンテナビューを追加することです。 UINavigationController
. 。あなたは次のようなものを思い付くでしょう:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[self performSelector:@selector(resizeViewsForNavigationBar) withObject:nil afterDelay:(0.5f * duration)];
}
- (void)resizeViewsForNavigationBar {
[self.navigationBar sizeToFit];
// Resize containerView accordingly.
CGRect containerViewRect = self.containerView.frame;
containerViewRect.origin.y = CGRectGetMaxY(self.navigationBar.frame);
containerViewRect.size.height = CGRectGetMaxY(self.view.frame) - containerViewRect.origin.y;
self.containerView.frame = containerViewRect;
}
他のヒント
あなたが望む動作は、ナビゲーションコントローラー(バー(ナビゲーションまたはツールバー)を表す)がアプリ代表のウィンドウに追加されるか、タブバーなどで提示された場合にのみ発生すると思います。
IBまたはコードを介してナビゲーションバーを追加できます。ナビゲーションコントローラーがあるという意味ではありません。私の意見では、ナビゲーションコントローラーを作成し、作業中のビューコントローラーで初期化します。おそらく、ビューが回転すると、NAVバーが少し縮小します。
お役に立てれば
Joostに感謝します
@property BOOL forceFullHeightInLandscape;
私のカスタムuinavigationbarクラスに。および設定:
-(id)initWithFrame:(CGRect)frame{
forceFullHeightInLandscape = YES;
魅力のように働いた
Joostの答えに似ていますが、方法を置く willAnimateRotationToInterfaceOrientation
より良いアニメーション効果があります willRotateToInterfaceOrientation
. 。 (アニメーションの遅延はありません)
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[self.navigationBar sizeToFit];
}
私もこのエラーを持っていましたが、おそらく同じ理由ではありませんが、グーフする他の人を助けるためにここに投稿したいと思います。
あなたが無効にしている場合 willRotateToInterface
方法、 電話することを忘れないでください super
私はそれで空白でしたが、受け入れられた答えを見たら、それは私に来ました。
これはあなたに似ていると思います、そして、彼らはコードスニペットを持っています:
インターフェイスビルダーとXcodeの中だけで、そしてあなたが使用する限り、いくつかのことを試しました UINavigationBarController
なので RootViewController
説明どおりに機能します - 小さくなる。コントローラー自体内またはコントローラーのロード方法の一部で何かを変更しましたか?特にイベントの解雇に関して?私はいくつかの悪い経験をしていました UITabBarController
適切なメッセージングを破るという点で、「間違った」副作用を取得しました。試してみて推測します。
(void)viewWillLayoutSubviews {
self.navigationItem.titleView.bounds = self.navigationController.navigationBar.bounds;
}