如何仅为一个视图控制器设置 UINavigation 栏的 titletextattributes?

Posted

技术标签:

【中文标题】如何仅为一个视图控制器设置 UINavigation 栏的 titletextattributes?【英文标题】:How can I set the titletextattributes for a UINavigation bar for just one view controller? 【发布时间】:2012-10-09 21:57:32 【问题描述】:

我正在尝试仅更改我的一个视图控制器的字体大小,因为它适用于更多文本,因此需要比我的其他视图更小的字体大小。我在didFinishLaunchingWithOptions 期间在appdelegate 中设置导航栏属性,然后在viewDidLoad 期间为有问题的视图控制器设置字体。但是,当我返回或前进屏幕时,我对导航栏所做的更改会保留下来,即较小的字体。有没有解决的办法?例如在退出视图时将字体设置为正常?

Cliffsnotes:试图在一个视图控制器中设置字体,但是一旦我设置了它,它就会应用于所有视图控制器。

代码如下:

在 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]];

【问题讨论】:

我尝试使用您的解决方案编辑标题颜色:NSDictionary *titleTextAttributes = [[UINavigationBar appearance] titleTextAttributes]; [titleTextAttributes setValue:[UIColor colorWithRed:0.48627454040000001 green:0.050980396570000003 blue:0.13725490870000001 alpha:1] forKey:UITextAttributeTextColor]; [[UINavigationBar appearance] setTitleTextAttributes:titleTextAttributes]; 但不起作用:S! 【参考方案1】:

导航栏由导航控制器中的所有视图控制器共享。所以一旦你改变了导航栏,同一个导航栈中的所有视图控制器都会受到影响。一种选择是为这个视图控制器设置一个自定义 titleView。

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

这样,只有一个视图控制器显示自定义标题。

另一种选择是在视图控制器的 viewWillAppear 方法中更改导航栏的外观,然后在视图控制器的 viewWillDisappear 方法中将其重置。但这种方法可能不如只使用自定义 titleView 流畅。

【讨论】:

coolio,我完全忘记了 viewwilldisappear 方法,这正是我要找的。​​span> 【参考方案2】:

所以,现在您的属性键已被弃用。使用此键:

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];

【讨论】:

以上是关于如何仅为一个视图控制器设置 UINavigation 栏的 titletextattributes?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4仅为一个视图控制器设置导航属性

如何在 Xamarin 表单中使用 MVVM 仅为集合视图中的选定框架设置颜色?

iOS 7. 仅为一个视图控制器更改页面方向

ios,导航栏与其内容视图重叠

模态视图的奇怪位置

如何在通用 UIViewController - 通用应用程序中仅为 iPAD 创建 IBOutlet