11

Я пытаюсь изменить цвет кнопок панели навигации, цвета оттенка панели навигации и цвета текста, однако, похоже, я ничего не получаю. MFMailComposeViewController активируется через UIActivityViewController, и я пробовал несколько разных методов, которые работали до этого (но не через UIActivityViewController).Изменение цвета строки состояния в MFMailComposeViewController через UIActivityViewController

Это мой текущий код:

UINavigationBar.my_appearanceWhenContainedIn(MFMailComposeViewController).barTintColor = UIColor.blackColor() 

Это было предложено here. Я также пробовал:

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) 
    }) 

ответ

0

Перейти в файл делегата приложения и добавить эти строки в didFinishLaunchingWithOptions :) Это обновит цвет строки состояния для всех контроллеров представления.

UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent 

Кроме того, в файле info.plist добавить новый ключ под названием «Вид на базе контроллера в строке состояния внешний вид» и установите значение «NO»

UPDATE

Чтобы установить diffrent стилей между видами попробуйте следующее:

override func preferredStatusBarStyle() -> UIStatusBarStyle { 
return UIStatusBarStyle.LightContent 
} 

Тогда вы можете вернуть свет или тьму в зависимости от того, чего вы пытаетесь достичь :)

+0

У меня есть это, но мне нужно, чтобы стиль строки статуса отличался от диспетчеров. – user3746428

-1

MFMailComposeViewController устанавливает свой собственный стиль состояния, к которому у вас нет доступа. Вы можете, возможно, копаться в некоторых частных API, чтобы сделать это, но тогда ваше приложение определенно будет отклонено Apple.

В качестве побочного примечания, однако, вы не должны ничего менять об Apple, предоставляемом UIViewController (s). Они выглядят так, потому что они оформлены после оригинального приложения. Это предназначено, чтобы дать пользователям ощущение местоположения и направления в приложении. Apple также может отклонить ваше приложение, потому что вы изменили свой материал.

+0

Хотя это может быть так, у меня было одобрено много других приложений, которые делают то же самое, поэтому я не слишком беспокоюсь о том, что он отклоняется. – user3746428

1

для 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]; 
4

Вы можете подкласс 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 для всего вашего приложения.

+0

можете ли вы отметить это как правильный ответ, если он решил вашу проблему, пожалуйста? – MarkHim

Смежные вопросы