7

我正在为导航栏设置图像,如下所示:

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

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

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

但它没有任何效果(导航栏的样式仍然是我在里面的图像MFMessageComposeViewController)。我在这里想念什么?

4

3 回答 3

4

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

子类MFMessageComposeViewController

在 init 方法backgroundImagenavigationBar设置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-08-18T15:43:48.630 回答
2

就在呈现 MFMessageComposeViewController 之前尝试

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

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

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

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

于 2012-10-30T08:45:52.537 回答
0

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

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

2)如果失败了,那么我怀疑必须非常具体地说明何时使用您的图像,因此您必须将第一个语句替换为涵盖整个班级的“何时包含”语句的长列表。如果你有一个所有视图控制器都使用的子类——一些基类——那么我相信你可以使用它。希望#1有效!

于 2012-08-18T14:03:09.050 回答