MFMessageComposeViewController外观iOS 7

时间:2013-09-26 00:21:53

标签: ios ios7 mfmailcomposeviewcontroller uiappearance

我有一个外观代理,可以在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代理,如下所示。

enter image description here

这看起来很糟糕,我希望MFMessageComposeViewController不遵守代理但是试图做

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

没有任何影响。

我应该采取什么行动?

2 个答案:

答案 0 :(得分:6)

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

或者,改变你的想法。将全局外观保留为默认值。然后,您可以选择适当地应用样式化导航栏。

如果“在适当的地方”最终成为应用程序的90%,只需设置一个UIViewController的瘦子类(或者你经常使用的任何视图控制器),然后使用你希望外观的那个。

[[UINavigationBar appearanceWhenContainedIn:[MyStyledViewController class], nil] 
  setBarTintColor:[UIColor colorWithRed:54./255 green:165./255 blue:53./255 alpha:1]];

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

答案 1 :(得分: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]];

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