MFMessageComposeViewController外观iOS 7

MFMessageComposeViewController外观iOS 7,ios,ios7,mfmailcomposeviewcontroller,uiappearance,Ios,Ios7,Mfmailcomposeviewcontroller,Uiappearance,我有一个外观代理,它在UINavigationBar [[UINavigationBar外观]设置部分颜色:[UIColor颜色与红色:54./255绿色:165./255蓝色:53./255 alpha:1] 根据需要,我使用appearancewhen containedIn: [[UINavigationBar在包含在:[InSearchViewController类]中时的外观,无]SetPartInColor:[UIColor-WithWhite:0.80 alpha:1] 这个很好用

我有一个外观代理,它在
UINavigationBar

[[UINavigationBar外观]设置部分颜色:[UIColor颜色与红色:54./255绿色:165./255蓝色:53./255 alpha:1]

根据需要,我使用
appearancewhen containedIn:

[[UINavigationBar在包含在:[InSearchViewController类]中时的外观,无]SetPartInColor:[UIColor-WithWhite:0.80 alpha:1]

这个很好用

但是,当我呈现一个
MFMessageComposeViewController
时,它会依附于
UINavigationBar
代理,如下所示

这显然看起来很糟糕,我更希望
MFMessageComposeViewController
不要坚持代理,而是尝试这样做

[[UINavigationBar在包含在:[MFMessageComposeViewController类]中时的外观,无]设置部分颜色:[UIColor whiteColor]]

没有影响


我应该采取什么行动

hacky方法:将外观设置回默认白色,呈现模态,在模态返回时将外观设置为styled

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

如果“在适当的地方”最终占应用程序的90%,只需设置UIViewController(或您经常使用的任何视图控制器)的一个子类,并在您想要外观的地方使用它

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

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

在深入研究并尝试了一些不同的建议之后,我使用UINavigationController子类找到了一个不错的、非黑客的解决方案

这允许我使用外观代理一次性设置所有想要的导航条的样式,除了
MFMessageComposeViewController
mfmailcomoseviewcontroller
之外,我更希望它们看起来标准,以便向用户传达它们正在使用核心iOS功能

1-创建
UINavigationController
子类

2-按原样使用外观代理设置导航栏的样式,但现在在包含以下内容时使用外观:

[[UINavigationBar appearanceWhenContainedIn:[KCStyledNavController class], nil] setBarTintColor:[UIColor redColor]];
[[UINavigationBar appearanceWhenContainedIn:[KCStyledNavController class], nil] setTintColor:[UIColor whiteColor]];

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

我被你的问题描述搞糊涂了。“看起来很糟糕”这个词让我大吃一惊,因为它太模糊了。iOS 7上的所有东西对我来说都很糟糕——扁平的外观、丑陋的键盘等等。那么,难读的绿色文本是您试图避免的具体问题吗?问题是让UIAppearance代理在撰写消息视图的导航栏上工作。我不是在寻找设计输入。这并不像我期望的那样尊重我设定的外观。用截图详细回答。您还可以创建一个
UINavigationController
子类,并将其作为导航控制器。这样,你就不必把你所有的风投都搞乱了。@Marcelofari Greg的建议实际上效果很好,除了我的
UINavigationBar
s在
UINavigationController
中之外,所以我做了看起来合乎逻辑的事情。如你所说创建了一个子类,并设置了包含在我的子类中时的外观。。。然而,外观仍然不适用。想法?好的,这个答案澄清了问题。我必须单独指定外观。我想我可以提供一个列表,它将适用于列表中的所有内容,而不是列表的层次顺序。感谢您留下这个链接@ChrisWagnerYeah,这是我正在采取的相同方法。也许答案/评论中不够清楚。这似乎是最干净的方法。有趣的是,苹果公司说不要设计他们的东西,但他们坚持你的外观代理。你会认为他们会阻止他们。