質問

私のアプリでは、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

私はそれで空白でしたが、受け入れられた答えを見たら、それは私に来ました。

これはあなたに似ていると思います、そして、彼らはコードスニペットを持っています:

iPhone:ボタン付きのuinavigationbar-高さを調整します

インターフェイスビルダーとXcodeの中だけで、そしてあなたが使用する限り、いくつかのことを試しました UINavigationBarController なので RootViewController 説明どおりに機能します - 小さくなる。コントローラー自体内またはコントローラーのロード方法の一部で何かを変更しましたか?特にイベントの解雇に関して?私はいくつかの悪い経験をしていました UITabBarController 適切なメッセージングを破るという点で、「間違った」副作用を取得しました。試してみて推測します。

(void)viewWillLayoutSubviews {
      self.navigationItem.titleView.bounds = self.navigationController.navigationBar.bounds;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top