Ios7 移除MFMailComposeViewController的UINavigationBar的半透明效果

Ios7 移除MFMailComposeViewController的UINavigationBar的半透明效果,ios7,translucency,Ios7,Translucency,我没有找到删除MFMailComposeViewController的UINavigationBar半透明效果(iOS 7)的方法。我的应用程序中的所有其他UINavigationBars都没有问题 我试过了,但没有成功: MFMailComposeViewController *mailController = [[MFMailComposeViewController alloc] init]; mailController.navigationBar.translucent = NO;

我没有找到删除MFMailComposeViewController的UINavigationBar半透明效果(iOS 7)的方法。我的应用程序中的所有其他UINavigationBars都没有问题

我试过了,但没有成功:

MFMailComposeViewController *mailController = [[MFMailComposeViewController alloc] init];
mailController.navigationBar.translucent = NO;

有什么想法吗?

我想我在某个地方读到,苹果公司不希望我们对ViewController进行太多定制,但除此之外,这里接受的答案可能会有所帮助:

…因为时间问题

MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
[self.navigationController presentViewController:mailVC animated:YES completion:^{
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}];
如果不希望它在全球范围内发生变化:

尝试将类别添加到MFMailComposeViewController

@implementation MFMailComposeViewController (IOS7_StatusBarStyle)

-(UIStatusBarStyle)preferredStatusBarStyle
{
   return UIStatusBarStyleLightContent;
}

-(UIViewController *)childViewControllerForStatusBarStyle
{
   return nil;
}

@end

这不是几行代码就可以实现的,但这是一种可能适合您的方法

要隐藏导航栏,请执行以下操作:

[[self-navigationController]setNavigationBarHidden:是动画:是]

要显示它:

[[self-navigationController]setNavigationBarHidden:否动画:是]

此处提供了此方法的文档

要侦听“双击”或双击,请将UIView子类化,并将该子类的实例设置为视图控制器的view属性

在视图子类中,重写其-touchesend:withEvent:方法,并通过测量两个连续点击之间的时间(可能使用-timeintervalscenedate:)来计算在一段时间内获得的触摸次数。或通过[触摸tapCount]测试结果

如果您得到两次点击,您的子类视图将发出一个通知,您的视图控制器已注册以侦听该通知


当您的视图控制器听到通知时,它会触发一个选择器,该选择器使用上述代码隐藏或显示导航栏,具体取决于导航栏的当前可见状态,可通过读取导航栏的isHidden属性来访问该导航栏。

有点晚,但对于遇到此帖子的人:

默认情况下,MFMailComposeViewController的导航栏是半透明的,您无法更改。您只能更改外观代理支持的属性。来自Apple文档:

此类的视图层次结构是私有的,不能修改 信息技术但是,您可以通过使用自定义实例的外观 UIP协议

这使得您在更改MFMailComposeViewController的导航栏外观时有有限的选项,因为并非所有属性都受支持(例如,如果您尝试类似[UINavigationBar外观]setTranslucent:NO]的操作,它将崩溃,因为代理不支持此属性

以下是外观代理支持的属性列表:

现在,要将MFMailComposeViewController的导航栏设置为非半透明,需要更改其背景颜色(它是UIView允许的属性,UINavigationBar是UIView的子类):

请确保在实例化MFMailComposeViewController之前执行此操作,例如:

[[UINavigationBar appearance] setBackgroundColor:[UIColor whiteColor]];
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];

您还可以使用Appearance when contained in:MFMailComposeViewController,仅当导航栏归MFMailComposeViewController所有时才影响导航栏,或者您可以选择将其更改回mailComposeController:didFinishWithResult中以前的状态。

您好,找到解决方案了吗?没有,我没有。不确定是否可能。您尝试过吗隐藏并恢复它?这似乎是iOS中使用模式视图控制器时出现的问题。我放弃了,开始在ViewWillDisplay和ViewWillEnglish中隐藏并恢复它。[[UIApplication sharedApplication]setStatusBarHidden:NO with Animation:UIStatusBaranimation];
[[UINavigationBar appearance] setBackgroundColor:[UIColor whiteColor]];
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];