22

ナビゲーションバーの高さを変更する方法を教えてもらえますか?

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

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

12 に答える 12

25

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

それは非常にうまく機能します。

于 2012-01-17T12:35:11.717 に答える
21

ナビゲーションバーの高さは変更しないでください。ViewControllerのAppleProgrammingGuideから:

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

ナビゲーションインターフェイスでは、ナビゲーションコントローラーがその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 /

于 2011-09-23T18:07:44.617 に答える
8

sizeThatFits: iOS11 UINavigationBar サブクラスでは機能しなくなりました。Apple エンジニアリングは、この手法がサポートされていないことを確認しており、iOS11 の変更により sizeThatFits: は参照されなくなりました。

于 2017-06-30T23:56:45.070 に答える
8

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

于 2014-09-26T08:05:46.710 に答える
6

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

- (void)viewWillAppear {

UINavigationBar *navigationBar = [[self navigationController] navigationBar];
CGRect frame = [navigationBar frame];
frame.size.height = 82.0f;
[navigationBar setFrame:frame];
}
于 2012-12-04T07:30:00.783 に答える
5

使ってみて -

CGFloat navBarHeight = 10.0f;    
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight);
[self.navigationController.navigationBar setFrame:frame];
于 2009-07-24T04:49:48.547 に答える
3

self.navigationController.navigationBar.framereadonlyiOS バージョン 4.x のプロパティです

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

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

于 2011-08-11T01:53:46.420 に答える
2

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

絶対的な最善の解決策は、https ://gist.github.com/maciekish/c2c903d9b7e7b583b4b2 にあります。カテゴリを設定ビュー コントローラーにインポートし、「self.navigationController.navigationBar」でメソッドを呼び出しましviewDidLoadた。setHeight:素晴らしく見える!

于 2015-08-31T21:21:20.437 に答える
1

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

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

他のパラメーターを変更したい場合は、パラメーターのいずれかを編集するだけです....

于 2015-11-07T07:44:14.163 に答える
0

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

CGFloat navBarHeight = 10.0f;    
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight);
[self.navigationController.navigationBar setFrame:frame];
于 2016-05-10T10:57:23.467 に答える