Изменение цвета строки состояния в MFMailComposeViewController через UIActivityViewController
Я пытаюсь изменить цвет кнопок панели навигации, цвета оттенка панели навигации и цвета текста, однако, похоже, я ничего не получаю. MFMailComposeViewController
активируется с помощью UIActivityViewController
, и я пробовал несколько разных методов, которые работали до этого (не через UIActivityViewController
хотя).
Это мой текущий код:
UINavigationBar.my_appearanceWhenContainedIn(MFMailComposeViewController).barTintColor = UIColor.blackColor()
Это было предложено здесь. Я также пробовал это:
activityVC.navigationController?.navigationBar.tintColor = UIColorFromRGB(0x0096FF)
activityVC.navigationController?.navigationBar.barTintColor = UIColor.whiteColor()
Я также хочу изменить цвет строки состояния.
У кого-нибудь есть идеи?
UPDATE:
Я исправил проблемы с навигационной панелью для кнопок и заголовка, но все еще искал решение для строки состояния. Выполнение этого не работает:
self.presentViewController(activityVC, animated: true, completion: { () in
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
})
Ответы
Ответ 1
Вы можете подклассифицировать MFMailViewController
и переопределить его метод viewWillAppear
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
self.navigationController.navigationBar.translucent = false
self.navigationController.navigationBar.opaque = false
self.navigationController.navigationBar.barTintColor = UIColor.blueColor()
}
Поскольку вы хотите, чтобы строка состояния была lightcontent
, когда активен MFMailComposeViewController, вы не должны помещать
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
в делегатах вашего приложения didFinishLoading. Это установило бы lightContent для всего вашего приложения.
Ответ 2
для iOS8 вы используете barTintColor для изменения цвета статуса
NSString *invitationText = @"test";
[UINavigationBar appearance].barTintColor = [UIColor whiteColor];
MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
mc.mailComposeDelegate = self;
[mc setSubject:@"Test "];
[mc setMessageBody:invitationText isHTML:YES];
[self presentViewController:mc animated:YES completion:NULL];
Ответ 3
Перейдите в файл делегата приложения и добавьте эти строки в свой файл didFinishLaunchingWithOptions:) Он обновит цвет строки состояния для всех контроллеров представлений.
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
Кроме того, в вашем файле info.plist добавьте новый ключ под названием "Просмотр состояния панели управления на основе контроллера" и установите значение "НЕТ"
UPDATE
Чтобы установить разные стили между представлениями, попробуйте следующее:
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
Затем вы можете вернуть свет или тьму в зависимости от того, чего вы пытаетесь достичь:)
Ответ 4
MFMailComposeViewController
устанавливает свой собственный стиль строки состояния, к которому у вас нет доступа. Вы можете, возможно, вникнуть в некоторые частные API, чтобы сделать это, но тогда ваше приложение определенно будет отклонено Apple.
В качестве побочного примечания, вы не должны ничего менять о Apple, предоставляемом UIViewController (s). Они выглядят так, потому что они оформлены после оригинального приложения. Это означало дать пользователям ощущение местоположения и направления в приложении. Apple также может отклонить ваше приложение, потому что вы изменили свой материал.