iOS - UIAppearance appearanceWhenContainedIn问题

时间:2012-08-18 09:13:12

标签: ios cocoa-touch uiappearance

我正在为我的导航栏设置图像:

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navbar.png"] forBarMetrics:UIBarMetricsDefault];

然后我不希望这个图像用于MFMessageComposeViewController类,所以我通过这样做排除它:

[[UINavigationBar appearanceWhenContainedIn:[MFMessageComposeViewController class], nil] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];

但它没有效果(导航栏仍然使用MFMessageComposeViewController内的图像进行样式设置。我在这里缺少什么?

3 个答案:

答案 0 :(得分:4)

找到我的问题的解决方案:

MFMessageComposeViewController

进行子类化

在init方法中,将backgroundImage的{​​{1}}设置为navigationBar

瞧!

nil

答案 1 :(得分:2)

在呈现MFMessageComposeViewController之前尝试

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"MyUINavigationBarImageClear"] forBarMetrics:UIBarMetricsDefault];

并在messageComposeViewController中:didFinishWithResult:回调重置为

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"MyUINavigationBarImageFull"] forBarMetrics:UIBarMetricsDefault];

我还设置了MFMessageComposeViewController的.navigationBar.tintColor属性,以获取取消按钮以匹配我的MyUINavigationBarImageClear图像。

答案 2 :(得分:0)

这里有两个想法(但没有经过测试):

1)我怀疑尝试使用nil覆盖是行不通的 - 该语句被忽略。我建议你做的是创建一个透明的图像,并将其用作MFMessageComposeViewController的背景。

2)如果失败了,那么我怀疑必须非常具体地说明何时使用你的图像,所以你必须用一长串的“当包含在”整个班级的陈述中替换第一个陈述。如果你有一个你的所有视图控制器使用的子类 - 一些基类 - 那么我相信你可以使用它。希望#1有效!