4

ビューコントローラの1つだけのフォントサイズを変更しようとしています。これは、より多くのテキストに適しているため、他のビューよりも小さいフォントサイズが必要になるためです。didFinishLaunchingWithOptions中にappdelegateでナビゲーションバーの属性を設定し、次にviewDidLoad中に問題のViewControllerのフォントを設定しています。ただし、画面に戻ったり、進んだりしても、ナビゲーションバーに加えた変更、つまり小さいフォントは保持されます。これを回避する方法はありますか?たとえば、ビューなどを終了するときにフォントを通常に戻しますか?

Cliffsnotes:1つのView Controllerでフォントを設定しようとしていますが、一度設定すると、すべてのViewControllerに適用されます。

コードは次のとおりです。

AppDelegateの場合:

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navbar.png"] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setTitleTextAttributes:
 [NSDictionary dictionaryWithObjectsAndKeys:
  [UIColor clearColor],
  UITextAttributeTextColor,
  [UIColor whiteColor],
  UITextAttributeTextShadowColor,
  [NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
  UITextAttributeTextShadowOffset,
  [UIFont fontWithName:@"QuicksandBold-Regular" size:24.0],
  UITextAttributeFont,
  nil]];

ビューコントローラのviewDidLoad:

[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                                     [UIColor clearColor],
                                                                     UITextAttributeTextColor,
                                                                     [UIColor whiteColor],
                                                                     UITextAttributeTextShadowColor,
                                                                     [NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
                                                                     UITextAttributeTextShadowOffset,
                                                                     [UIFont fontWithName:@"QuicksandBold-Regular" size:18.0],
                                                                     UITextAttributeFont,
                                                                     nil]];
4

2 に答える 2

3

ナビゲーションバーは、ナビゲーションコントローラーのすべてのビューコントローラーで共有されます。したがって、ナビゲーションバーを変更すると、同じナビゲーションスタック内のすべてのビューコントローラーが影響を受けます。1つのオプションは、この1つのViewControllerにカスタムtitleViewを設定することです。

self.navigationItem.titleView = ... // some UILabel with the desired formatting

このように、1つのViewControllerのみがカスタムタイトルを表示します。

もう1つのオプションは、View ControllerのviewWillAppearメソッドでナビゲーションバーの外観を変更してから、ViewControllerのviewWillDisappearメソッドでリセットすることです。ただし、このアプローチは、カスタムtitleViewを使用する場合ほどスムーズではない場合があります。

于 2012-10-09T22:12:31.550 に答える
0

そのため、属性付きキーは非推奨になりました。次のキーを使用します。

NSDictionary* attributes = [NSDictionary dictionaryWithObjectsAndKeys:
 [UIColor clearColor], NSForegroundColorAttributeName,
 [UIColor whiteColor], NSShadowAttributeName,
 [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], NSShadowAttributeName,
 [UIFont fontWithName:@"QuicksandBold-Regular" size:24.0], NSFontAttributeName,
 nil];
于 2016-02-16T21:37:08.887 に答える