web-dev-qa-db-ja.com

UINavigationBarの高さを変更する

ナビゲーションバーの高さを変更する方法を教えてください。

ここに私がこれまで持っているものがあります:

CGFloat navBarHeight = 10;
self.navigationController.navigationBar.frame.size.width = navBarHeight;
22
Oceandrive

このようにUINavigationBarに基づいてカテゴリクラスを作成できます

.hファイル

#import UIKit/UIKit.h    
@interface UINavigationBar (myNave)
- (CGSize)changeHeight:(CGSize)size;
@end

および.mファイル

#import "UINavigationBar+customNav.h"
@implementation UINavigationBar (customNav)
- (CGSize)sizeThatFits:(CGSize)size {
    CGSize newSize = CGSizeMake(320,100);
    return newSize;
}
@end

とてもいい感じです。

25
Shimon Wiener

ナビゲーションバーの高さを変更しないでください。 From Apple View Controllerのプログラミングガイド:

ナビゲーションバーの外観のカスタマイズ

ナビゲーションインターフェイスでは、Navigation ControllerはそのUINavigationBarオブジェクトを所有し、それを管理します。ナビゲーションバーオブジェクトを変更したり、その境界、フレーム、またはアルファ値を直接変更することは許可されていません。ただし、次のようないくつかの変更可能なプロパティがあります。

●barStyleプロパティ

●半透明のプロパティ

●tintColorプロパティ

(Appleから取得: https://developer.Apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html

-UPDATE-IOS 7 ---まだ利用可能なプロパティのみを変更できますが、以下はナビゲーションバーの柔軟性を実現する方法に関する素晴らしいチュートリアルです http:// www.appcoda.com/customize-navigation-status-bar-ios-7/

21
Gil Margolin

この問題を解決し、UINavigationControllerのサブクラスを作成しました。このMainNavigationViewController.mファイル内で、self.navigationBarのフレームを設定するviewDidLayoutSubviews()メソッドを書き換えます

8
Yerkezhan

sizeThatFits:iOS11 UINavigationBarサブクラスでは動作しなくなりました。 Appleこの技術は決してサポートされておらず、iOS11の変更によりsizeThatFits:のコンサルティングは行われていません。

7
ghr

ViewControllerの-(void)viewWillAppearメソッドをオーバーライドし、以下のコードを試してください。

- (void)viewWillAppear {

UINavigationBar *navigationBar = [[self navigationController] navigationBar];
CGRect frame = [navigationBar frame];
frame.size.height = 82.0f;
[navigationBar setFrame:frame];
}
6
Augustine P A

使用してみてください-

CGFloat navBarHeight = 10.0f;    
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight);
[self.navigationController.navigationBar setFrame:frame];
5
Cliff Viegas

最もシンプルで効果的なソリューションは、ナビゲーションバーにカテゴリを追加することです。 (しかし、おそらく最良の解決策ではありません)

@interface UINavigationBar (CustomHeight)

@end


@implementation UINavigationBar (CustomHeight)

- (CGSize)sizeThatFits:(CGSize)size {
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    return CGSizeMake(screenRect.size.width, kNavBarHeightNoStatus);
}
@end

knavBarHeightNoStatusは、ナビゲーションバーの高さです。 UINavigationBarのフレームが間違っているため、UIScreen境界を使用します

PS:注意してください、あなたはSideMenuでそれを使用していくつかの問題がある可能性があります

4
Beninho85

self.navigationController.navigationBar.frameは、iOSバージョン4.xのreadonlyプロパティです

変更されますが、異常な動作が見られます。

たとえば、アプリの状態がバックグラウンドに変更されてフォアグラウンドに戻ると、ナビゲーションバーに元のサイズの高さが表示されます

3
tachikoma

選択した方法によっては、多くの問題に遭遇しました。私の特定のケースでは、設定ビューコントローラーを除いて、アプリ全体でナビゲーションバーが非表示になりました。ナビゲーションバーのカスタムの高さを指定すると同時にナビゲーションバーを表示する必要があるため、ソースビューコントローラーと設定ビューコントローラーの間のセグエは非常にずさんなアニメーションでした。

絶対的な最善の解決策は、ここにあります: https://Gist.github.com/maciekish/c2c903d9b7e7b583b4b2 。カテゴリをSettings View Controllerにインポートし、viewDidLoadsetHeight:「self.navigationController.navigationBar」のメソッド。素晴らしく見える!

2
Josh Gafni

次のコードは、高さ以外のフレームの他のパラメーターには影響しません

 [self.navigationController.navigationBar setFrame:CGRectMake(self.navigationController.navigationBar.frame.Origin.x, self.navigationController.navigationBar.frame.Origin.y, self.navigationController.navigationBar.frame.size.width, 150)];

他のパラメータを変更したい場合は、いずれかのパラメータを編集してください。

1
abdul sathar

カテゴリの作成とオーバーライドsizeThatFits(_ size:CGSize)-> CGSizeメソッドはアプリ全体でUINavigationBarのサイズを変更します。 1つの特定のViewControllerでのみUINavigationBarの高さ/サイズを変更したい場合(私の場合)

これは私がやった方法です。

extension UINavigationBar {
    open override func sizeThatFits(_ size: CGSize) -> CGSize {
        let v = self.value(forKey: "frame") as? CGRect
        return v?.size ?? CGSize(width: UIScreen.main.bounds.width, height: 44)
    }
}

呼び出し元のViewControllerは次のようになります

override func viewDidLoad() {
    super.viewDidLoad()
    configureNavigationBar()
}

private func configureNavigationBar() {
    var naviBarFrame = self.navigationController?.navigationBar.frame
    naviBarFrame?.size.height = 74
    let rect = naviBarFrame ?? CGRect(x: 0, y: 20, width: UIScreen.main.bounds.width, height: 74)
    self.navigationController?.navigationBar.setValue(rect, forKey: "frame")
}
0

- (void)viewDidLayoutSubviewsメソッド内でこのコードを試してください。

CGFloat navBarHeight = 10.0f;    
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight);
[self.navigationController.navigationBar setFrame:frame];
0
Group