ナビゲーションバーの高さを変更する方法を教えてもらえますか?
これが私がこれまでに持っているものです:
CGFloat navBarHeight = 10;
self.navigationController.navigationBar.frame.size.width = navBarHeight;
ナビゲーションバーの高さを変更する方法を教えてもらえますか?
これが私がこれまでに持っているものです:
CGFloat navBarHeight = 10;
self.navigationController.navigationBar.frame.size.width = navBarHeight;
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
それは非常にうまく機能します。
ナビゲーションバーの高さは変更しないでください。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 /
sizeThatFits: iOS11 UINavigationBar サブクラスでは機能しなくなりました。Apple エンジニアリングは、この手法がサポートされていないことを確認しており、iOS11 の変更により sizeThatFits: は参照されなくなりました。
この問題を解決しました。UINavigationController のサブクラスを作成しました。この MainNavigationViewController.m ファイルで、self.navigationBar のフレームを設定する viewDidLayoutSubviews() メソッドを書き直します。
viewController で -(void)viewWillAppear メソッドをオーバーライドし、以下のコードを試してください。
- (void)viewWillAppear {
UINavigationBar *navigationBar = [[self navigationController] navigationBar];
CGRect frame = [navigationBar frame];
frame.size.height = 82.0f;
[navigationBar setFrame:frame];
}
使ってみて -
CGFloat navBarHeight = 10.0f;
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight);
[self.navigationController.navigationBar setFrame:frame];
self.navigationController.navigationBar.frame
はreadonly
iOS バージョン 4.x のプロパティです
変更されますが、異常な動作が見られます。
たとえば、アプリの状態がバックグラウンドに変更され、フォアグラウンドに戻ると、ナビゲーション バーには元のサイズの高さが表示されます
選択した方法によっては、多くの問題に遭遇しました。私の特定のケースでは、ナビゲーション バーは、設定ビュー コントローラーを除いて、アプリ全体で非表示になっていました。ナビゲーション バーのカスタムの高さを指定し、同時にナビゲーション バーを表示する必要があったため、ソース ビュー コントローラーと設定ビュー コントローラーの間のセグエのアニメーションが非常に雑でした。
絶対的な最善の解決策は、https ://gist.github.com/maciekish/c2c903d9b7e7b583b4b2 にあります。カテゴリを設定ビュー コントローラーにインポートし、「self.navigationController.navigationBar」でメソッドを呼び出しましviewDidLoad
た。setHeight:
素晴らしく見える!
次のコードは、高さ以外のフレーム内の他のパラメーターには影響しません
[self.navigationController.navigationBar setFrame:CGRectMake(self.navigationController.navigationBar.frame.origin.x, self.navigationController.navigationBar.frame.origin.y, self.navigationController.navigationBar.frame.size.width, 150)];
他のパラメーターを変更したい場合は、パラメーターのいずれかを編集するだけです....
- (void)viewDidLayoutSubviews
メソッド内でこのコードを試してください 。
CGFloat navBarHeight = 10.0f;
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight);
[self.navigationController.navigationBar setFrame:frame];