无法在MFMailComposeViewController上更改UIStatusBarStyle

时间:2013-09-18 23:53:52

标签: ios objective-c ios7 mfmailcomposeviewcontroller uistatusbar

我目前使用iOS 7机制在(UIStatusBarStyle)preferredStatusBarStyle子类上定义UINavigationController选择器来控制模态显示视图中状态栏的外观(返回UIStatusBarStyleLightContent)。使用MFMailComposeViewController的实例,我无法以任何方式影响状态栏的外观。

似乎问题是MFMailComposeViewController(这是一个UINavigationController子类)的顶视图是MFMailComposeInternalViewController,它是私有且没有文档的,看起来像我不应该不要搞砸。尝试子类化或创建它的类别会生成编译器错误。它是preferredStatusBarStyle UIStatusBarStyleDefault,我希望它是UIStatusBarStyleLightContent

其他答案建议将“查看基于控制器的状态栏外观”的plist值设置为NO,但我不能在不影响应用程序的其他部分的情况下执行此操作。有没有办法改变这个状态栏的外观?

2 个答案:

答案 0 :(得分:2)

MFMailComposeViewController,因为iOS6实际上不是真正的视图控制器,或者更确切地说,它不包含邮件组合视图控制器的真实视图层次结构。相反,它是远程视图控制器的代理,完全由不同的进程使用XPC绘制。

即使您在MFMailComposeViewController类中覆盖或调整方法,也无法影响其行为。这是Apple的目的。

有关远程视图控制器和XPC的更多信息,请访问: http://oleb.net/blog/2012/10/remote-view-controllers-in-ios-6/

答案 1 :(得分:1)

向MFMailComposeViewController(而不是MFMailComposeInternalViewController)添加一个类别,以便为我提供preferredStatusBarStyle,并且不会生成任何编译错误或警告。

请参阅此问题以获取我引用的原始答案:

MFMailComposeViewController in iOS 7 statusbar are black