iOS – UIAppearance appearanceWhenContainedIn 问题
Posted
技术标签:
【中文标题】iOS – UIAppearance appearanceWhenContainedIn 问题【英文标题】:iOS – UIAppearance appearanceWhenContainedIn issues 【发布时间】:2012-08-18 09:13:11 【问题描述】:我正在为我的导航栏设置一个图像,如下所示:
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navbar.png"] forBarMetrics:UIBarMetricsDefault];
那么我不希望这个图像用于MFMessageComposeViewController
的类,所以我通过这样做来排除它:
[[UINavigationBar appearanceWhenContainedIn:[MFMessageComposeViewController class], nil] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
但它没有效果(导航栏仍然使用我在MFMessageComposeViewController
中的图像进行样式设置)。我在这里错过了什么?
【问题讨论】:
【参考方案1】:找到解决我的问题的方法:
继承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;
【讨论】:
这似乎在 ios 7 中无效【参考方案2】:就在展示 MFMessageComposeViewController 之前尝试
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"MyUINavigationBarImageClear"] forBarMetrics:UIBarMetricsDefault];
并在 messageComposeViewController:didFinishWithResult: 回调中重置为
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"MyUINavigationBarImageFull"] forBarMetrics:UIBarMetricsDefault];
我还设置了 MFMessageComposeViewController 的 .navigationBar.tintColor 属性以获取取消按钮以匹配我的 MyUINavigationBarImageClear 图像。
【讨论】:
【参考方案3】:这里有两个想法(但未经测试):
1) 我怀疑尝试用 nil 覆盖是行不通的 - 该语句被忽略。我建议你做的是创建一个透明图像,并将其用作 MFMessageComposeViewController 的背景。
2)如果失败了,那么我怀疑必须非常具体地说明何时使用您的图像,因此您必须将第一个语句替换为涵盖整个班级的“何时包含”语句的长列表。如果你有一个所有视图控制器都使用的子类——一些基类——那么我相信你可以使用它。希望 #1 有效!
【讨论】:
不幸的是,#1 没有用,所以我尝试了我的答案,它确实有效。奇怪的是appearanceWhenContainedIn:
似乎没有任何效果。以上是关于iOS – UIAppearance appearanceWhenContainedIn 问题的主要内容,如果未能解决你的问题,请参考以下文章
使用UIAppearance自定义iOS UIDatepicker
防止 iOS 7 UINavigationBar 使用 UIAppearance 为 barTintColor 更改设置动画