我为我的导航栏设置了一个图像,如下所示:
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navbar.png"] forBarMetrics:UIBarMetricsDefault];然后我不想让这个图像出现在MFMessageComposeViewController的类中,所以我通过这样做来排除它:
[[UINavigationBar appearanceWhenContainedIn:[MFMessageComposeViewController class], nil] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];但它没有任何效果(导航栏的样式仍然是我在MFMessageComposeViewController中的图像)。这里我漏掉了什么?
发布于 2012-08-18 23:43:49
找到了我问题的解决方案:
将MFMessageComposeViewController子类化
在init方法中,将navigationBar的backgroundImage设置为nil
瞧!
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
[self.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
}
return self;
}发布于 2012-10-30 16:45:53
就在展示MFMessageComposeViewController try之前
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"MyUINavigationBarImageClear"] forBarMetrics:UIBarMetricsDefault];并在messageComposeViewController:didFinishWithResult:回调中重置为
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"MyUINavigationBarImageFull"] forBarMetrics:UIBarMetricsDefault];我还设置了MFMessageComposeViewController的.navigationBar.tintColor属性,以获得与我的MyUINavigationBarImageClear图像匹配的cancel按钮。
发布于 2012-08-18 22:03:09
这里有两个想法(但没有经过测试):
1)我怀疑尝试用nil覆盖是行不通的-该语句被忽略。我建议你做的是创建一个透明的图像,并使用它作为MFMessageComposeViewController的背景。
2)如果这失败了,那么我猜你将不得不非常具体地说明何时使用你的图像,所以你将不得不用覆盖整个类的一长串“何时包含在”语句来替换第一个语句。如果你有一个所有视图控制器都使用的子类-某个基类-那么我相信你可以用它来代替。希望#1行得通!
https://stackoverflow.com/questions/12017382
复制相似问题