Подтвердить что ты не робот

Изменение цвета строки состояния в 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)
    })
4b9b3361

Ответ 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 также может отклонить ваше приложение, потому что вы изменили свой материал.