NoB*_*ody 59 ios ios7 mfmailcomposeviewcontroller
我在带有MFMailComposeViewController的ios 7应用程序中有一个反馈按钮.用户单击此按钮后,mailcomposer将打开,但状态栏将更改为黑色.有谁知道我该怎么办?
我只有ios7才有这个问题.我为ios7定制了我的应用程序.
MFMailComposeViewController *mailController = [[MFMailComposeViewController alloc] init];
mailController.mailComposeDelegate = self;
[mailController setSubject:@"Feedback"];
// Fill out the email body tex
NSString *emailBody = [NSString stringWithFormat:@"testest"],
[UIDevice currentDevice].model,
[UIDevice currentDevice].systemVersion];
[mailController setMessageBody:emailBody isHTML:NO];
[mailController setToRecipients:[NSArray arrayWithObjects:@"support@test.com",nil]];
dispatch_async(dispatch_get_main_queue(), ^{
[self presentModalViewController:mailController animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
Kel*_*ler 143
在presentViewController的完成块中为MFMailComposeViewController设置UIApplication statusBarStyle.即
MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
[self.navigationController presentViewController:mailVC animated:YES completion:^{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}];
Run Code Online (Sandbox Code Playgroud)
您可能还需要在Info.plist文件中添加和/或设置"查看基于控制器的状态栏外观"为NO.
Igo*_*uta 58
尝试将类别添加到MFMailComposeViewController
编辑:如果"查看基于控制器的状态栏外观"== YES,此解决方案有效
@implementation MFMailComposeViewController (IOS7_StatusBarStyle)
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
-(UIViewController *)childViewControllerForStatusBarStyle
{
return nil;
}
@end
Run Code Online (Sandbox Code Playgroud)
Sof*_*ner 25
迅捷解决方案.设置View controller-based status bar appearance为YES
import UIKit
import MessageUI
import AddressBookUI
extension MFMailComposeViewController {
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
override func childViewControllerForStatusBarStyle() -> UIViewController? {
return nil
}
}
extension ABPeoplePickerNavigationController {
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
override func childViewControllerForStatusBarStyle() -> UIViewController? {
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
对我来说诀窍是:
覆盖答案6中描述的两种方法
-(UIStatusBarStyle)preferredStatusBarStyle;
-(UIViewController *)childViewControllerForStatusBarStyle;
覆盖viewDidLoad如下:
-(void)viewDidLoad {
[super viewDidLoad];
[self preferredStatusBarStyle];
[self setNeedsStatusBarAppearanceUpdate];
}
Swift3的解决方案
将其添加到ViewController:
extension MFMailComposeViewController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
open override var childViewControllerForStatusBarStyle: UIViewController? {
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
设置View controller-based status bar appearance>> YES如下:
感谢@SoftDesigner
另一种清洁解决方案,可能不会更改您应用中的其他设置.在呈现Mail VC时,更改完成块中的状态栏:
controller.present(mailComposeViewController, animated: true) {
UIApplication.shared.statusBarStyle = .lightContent
}
Run Code Online (Sandbox Code Playgroud)
有时它不会正确更新状态栏样式.你应该用
[self setNeedsStatusBarAppearanceUpdate];
Run Code Online (Sandbox Code Playgroud)
要说iOS要手动刷新状态栏样式.希望有人能节省一些时间来了解它.
[self presentViewController:picker animated:YES completion:^{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[self setNeedsStatusBarAppearanceUpdate];
}];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18163 次 |
| 最近记录: |