12

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

我试过这个没有成功:

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

任何想法 ?

4

4 回答 4

1

有点晚了,但对于遇到这篇文章的人来说:

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

这个类的视图层次是私有的,你不能修改它。但是,您可以使用 UIAppearance 协议自定义实例的外观。

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

这是外观代理支持的属性列表:https ://gist.github.com/mattt/5135521

现在,要将 MFMailComposeViewController 的 navigationBar 设置为非半透明,您需要更改它的 backgroundColor(它是 UIView 允许的属性,UINavigationBar 是 UIView 的子类):

[[UINavigationBar appearance] setBackgroundColor:[UIColor whiteColor]];

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

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

您还可以使用外观当包含在:MFMailComposeViewController,仅当导航栏由 MFMailComposeViewController 拥有时才影响导航栏,或者您可以选择将其更改回 mailComposeController:didFinishWithResult 中的任何内容。

于 2014-09-26T17:27:17.410 回答
0

我想我在某处读到 Apple 不希望我们过多地自定义 ViewController,但除此之外,这里接受的 SO anser 可能会有所帮助:iOS 7 状态栏中的 MFMailComposeViewController 是黑色的

…因为时间问题。

于 2013-12-02T15:58:06.650 回答
0

这不是几行代码就能完成的事情,但这是一种可能适合您的方法。

要隐藏导航栏:

[[self navigationController] setNavigationBarHidden:YES 动画:YES];

要显示它:

[[self navigationController] setNavigationBarHidden:NO 动画:YES];

此方法的文档可在此处获得。

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

在视图子类中,覆盖它的 -touchesEnded:withEvent: 方法,并通过测量两次连续点击之间的时间(可能使用 -timeIntervalSinceDate:)来计算您在一段时间内获得的触摸次数。或者从 [touch tapCount] 测试结果。

如果你点击了两次,你的子类视图会发出一个 NSNotification ,你的视图控制器已经注册监听。

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

于 2014-08-12T11:42:35.843 回答
0
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
于 2014-07-30T10:47:24.820 回答