ios - 无法更改 MFMailComposeViewController 上的 UIStatusBarStyle

标签 ios objective-c ios7 mfmailcomposeviewcontroller uistatusbar

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

问题似乎是 MFMailComposeViewController(它是一个 UINavigationController 子类)的顶层 View 是一个 MFMailComposeInternalViewController,它是私有(private)的和无证的,似乎是我不应该惹的事。尝试子类化或创建它的类别会产生编译器错误。它的 preferredStatusBarStyleUIStatusBarStyleDefault,我希望它是 UIStatusBarStyleLightContent

其他答案建议将“View controller-based status bar appearance”的 plist 值设置为 NO,但我无法在不影响应用程序其他部分的情况下执行此操作。有什么办法可以改变这个状态栏的外观吗?

最佳答案

MFMailComposeViewController,自 iOS6 以来,它实际上并不是真正的 View Controller ,或者更确切地说,它不包含邮件撰写 View Controller 的真实 View 层次结构。相反,它是远程 View Controller 的代理,由完全不同的进程使用 XPC 绘制。

即使您重写或调整 MFMailComposeViewController 类中的方法,您也无法影响其行为。这是 Apple 故意的。

更多关于远程 View Controller 和 XPC 的信息在这里: http://oleb.net/blog/2012/10/remote-view-controllers-in-ios-6/

关于ios - 无法更改 MFMailComposeViewController 上的 UIStatusBarStyle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18884229/

相关文章:

ios - dispatch_semaphore_wait 不等待信号量

ios - 在 Swift 中测试 NSString 是否为数字的扩展

ios - 导航栏透明度问题

ios - Xcode - 无法编译添加的框架

iOS、AppStore、Default-568h@2x.png 和 4" View 模式停用

ios,以编程方式打开 VoiceOver

ios - iOS 7 和 iOS 8 上的不同框架高度

iOS 10 : NSInvalidLayoutConstraintException: Constraint improperly relates anchors of incompatible types

ios - 如何在 iOS 中向 WWDC 2010 茶壶示例代码添加距离注意事项?

objective-c - NSImage 加载图像的一部分