MFMessageComposeViewController外观iOS 7

Chr*_*ner 9 ios uiappearance ios7 mfmailcomposeviewcontroller

我有一个外观代理,将barTintColor属性设置为绿色UINavigationBar

[[UINavigationBar appearance] setBarTintColor:[UIColor colorWithRed:54./255 green:165./255 blue:53./255 alpha:1]];

根据需要,我使用覆盖它 appearanceWhenContainedIn:

[[UINavigationBar appearanceWhenContainedIn:[INFSearchViewController class], nil] setBarTintColor:[UIColor colorWithWhite:0.80 alpha:1]];

这很好用.

但是,当我提出MFMessageComposeViewController它遵守UINavigationBar代理时,看起来如下所示.

在此输入图像描述

这显然看起来很糟糕,我宁愿MFMessageComposeViewController不坚持代理,但试图做

[[UINavigationBar appearanceWhenContainedIn:[MFMessageComposeViewController class], nil] setBarTintColor:[UIColor whiteColor]];

没有影响.

我应该采取什么行动?

gre*_*heo 6

hacky方式:将外观设置回默认白色,显示模态,将外观设置为模态返回时的样式.

或者,扭转你的想法.将全局外观保留为默认值.然后,您可以在适当的位置选择性地应用样式化导航栏.

如果"在适当的地方"最终成为应用程序的90%,只需设置一个UIViewController的瘦子类(或者你经常使用的任何视图控制器),并使用你想要的外观.

[[UINavigationBar appearanceWhenContainedIn:[MyStyledViewController class], nil] 
  setBarTintColor:[UIColor colorWithRed:54./255 green:165./255 blue:53./255 alpha:1]];
Run Code Online (Sandbox Code Playgroud)

在每个.h文件中,将视图控制器超类设置为MyStyledViewController而不是普通的旧类UIViewController.

  • 您还可以创建一个`UINavigationController`子类,并将其作为导航控制器.这样,您就不必乱用所有VC. (3认同)

Kyl*_*egg 5

在深入挖掘并尝试了一些不同的建议之后,我使用UINavigationController子类获得了一个很好的非hacky解决方案.

这使我的风格都希望通过一次外观代理导航条,用的例外MFMessageComposeViewControllerMFMailComposeViewController我宁愿看标准,以沟通,他们正在使用的核心功能的iOS用户.

1 - 创建UINavigationController子类.

2 - 使用外观代理按原样设置导航栏的样式,但现在使用appearanceWhenContainedIn:

[[UINavigationBar appearanceWhenContainedIn:[KCStyledNavController class], nil] setBarTintColor:[UIColor redColor]];
[[UINavigationBar appearanceWhenContainedIn:[KCStyledNavController class], nil] setTintColor:[UIColor whiteColor]];
Run Code Online (Sandbox Code Playgroud)

3 - 进入故事板,选择UINavigationControllers您想要的所有样式,并将其自定义类更改为您的样式.