我有一个简单的应用程序UITableViewController
。该应用使用自定义主题,将主题应用于背景和UINavigationBar
。从这个视图中,我有一个UINavigationBarItem
(在代码中创建),用MFMailComposerViewController
打开电子表格。
我发现自定义主题UINavigationBar
有一些奇怪的行为,所以我只想删除图像并使用带有黑色按钮的白色UINavigationBar(取消,发送,标题)。
我有以下代码:
if ([MFMailComposeViewController canSendMail])
{
MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init];
mailer.mailComposeDelegate = self;
[mailer setSubject:@"PDF"];
[mailer addAttachmentData:data mimeType:@"application/pdf" fileName:fileName];
NSString *emailBody = @"Please find attached PDF";
[mailer setMessageBody:emailBody isHTML:NO];
[self presentViewController:mailer animated:YES completion:^{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
mailer.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : [UIColor blackColor]};
[[UINavigationBar appearance] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]];
[[mailer navigationBar] setTintColor:[UIColor blackColor]];
}];
}
所以我实际上删除了那里的图像。问题是它可以工作,但它实际上并没有使按钮变黑。此外,在某些情况下,会出现自定义主题UINavigationBar
图像显示的位置。我希望这永远不会发生。
我甚至创建了一个新类,它是MFMailComposer
的子类,并将UINavigationBar
的“主题”设置为白色创建栏,但仍然带来了图像有时。
我想要的是确保UINavigationBar
永远不会显示图像,并且始终有取消,标题和发送的黑色按钮。
任何想法都会非常感激。
更新
删除上面的setBarTintColor
和setTintColor
代码,我注意到第一次调用MFMailComposeViewController
时,主题就在UINavigationBar
中,但是如果我关闭该视图,然后重新打开它,然后删除图像,UINavigationBar
为白色。如何在没有主题的情况下将其显示为白色?我还删除了将图像移除到完成块之外的代码,但这没有什么区别。
答案 0 :(得分:2)
要使用颜色填充UINavigationBar,您可以将 backgroundImage 属性与空白阴影图像一起使用:
[[UINavigationBar appearance] setBackgroundImage:[self imageWithColor:[UIColor whiteColor]] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
-imageWithColor 是使用所选颜色创建UIImage的另一种方法:
- (UIImage *)imageWithColor:(UIColor *)color {
CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
然后设置黑色文本颜色和黑色状态栏,以便它可见:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor blackColor]}];
并且不要忘记这些属性将应用于每个导航栏。 希望能帮助到你! :)