UIDocumentInteractionController не учитывает цвет оттенка панели навигации

На одном из экранов в моем приложении показан предварительный просмотр локального изображения, и у меня есть кнопка действия в верхнем левом углу, которую я использую для представления вариантов взаимодействия с документом:

- (IBAction)actionButtonTapped:(id)sender {
    self.interactionController = [UIDocumentInteractionController interactionControllerWithURL:self.attachmentLocalUrl];
    self.interactionController.delegate = self;
    [self.interactionController presentOptionsMenuFromRect:self.view.frame inView:self.view animated:YES];
}

Это хорошо работает, так как показывает лист действий со списком параметров, включая электронную почту для отправки вложения по электронной почте. Когда я нажимаю кнопку электронной почты, отображается предварительный просмотр сообщения электронной почты с моим изображением в нем. Но есть одна вещь, которая не работает. Я настроил внешний вид своего приложения так, чтобы панель навигации имела одинаковые цвета во всем приложении. Вот код, который я запускаю первым в didFinishLaunchingWithOptions моего делегата приложения:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[UINavigationBar appearance].barTintColor = [UIColor blueColor];
[UINavigationBar appearance].tintColor = [UIColor whiteColor];
[UINavigationBar appearance].titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};

Это хорошо работает для моих собственных контроллеров представления, но контроллер представления электронной почты, отображаемый UIDocumentInteractionController, имеет элементы кнопок панели синего цвета, а не белого. А так как остальные параметры применены корректно, особенно синий фон для панели навигации, кнопки действий Отмена и Отправить почти не видны.

Я пытался воспроизвести это в простом проекте, но не смог. Так что, очевидно, я что-то делаю в своем приложении, чтобы помешать нормальной настройке. Но я не могу понять, что. Любая идея, как я могу отладить это?


person Sebastien    schedule 01.10.2014    source источник
comment
Вы можете попробовать этот код. Может быть, он поможет вам полностью прикрепленный вид на панели навигации"> stackoverflow.com/questions/26177142/   -  person Vijay yadav    schedule 13.10.2014
comment
Вы можете попробовать этот код: "> stackoverflow.com/questions/26177142/   -  person Vijay yadav    schedule 13.10.2014
comment
Возникла такая же проблема. Заметили, что это происходит только на устройстве, а не на симуляторе.   -  person Ray Fix    schedule 09.12.2014


Ответы (3)


Можете ли вы уточнить, что вы имеете в виду? Цвета на панели навигации испорчены в средстве выбора документов или в mfmailcomposer? Вот некоторый код для любого из них, который мне пришлось использовать...

Если он находится в UIDocumentPicker, установите его перед вызовом настоящего:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
{
    [[UIBarButtonItem appearance] setTintColor:[UIColor blackColor]];
    [[UINavigationBar appearance] setTintColor:[UIColor blackColor]];
}

а затем измените его обратно на цвета, которые были у вас в didPickDocument и didCancel Delegates

если он находится на контроллере MFMailcomposer, используйте это:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
{
    [controller.navigationBar setTintColor:[UIColor blackColor]];
}

Надеюсь это поможет

person Jh2170    schedule 09.10.2014
comment
Он находится в MFMailComposeViewController, который создается UIDocumentInteractionController после того, как я выбираю Mail в меню параметров. Поэтому я не знаю, как получить ссылку на этот контроллер представления, чтобы заставить цвет оттенка панели навигации, как вы это делаете. - person Sebastien; 10.10.2014

Я остановился на обходном пути, чтобы очистить настройку перед представлением UIDocumentController, а затем восстановить мою пользовательскую тему в viewWillAppear() контроллера представления, представляющего UIDocumentController.

func launchDocumentController() {
   UINavigationBar.appearance().titleTextAttributes = nil
   UINavigationBar.appearance().barTintColor = nil
   UINavigationBar.appearance().tintColor = nil
   documentController.presentOptionsMenuFromRect(self.view.frame, inView: self.view, animated: true)
}

потом

public override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    // Restore the reset bar colors
    Theme.current.customizeAppearance()
}

Если не считать обновления ОС, я думаю, что это лучший «ответ», который вы получите. Прости. (Когда у меня будет возможность, я зарегистрирую радар.)

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

person Ray Fix    schedule 10.12.2014

Вот что отлично сработало для меня:

func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
    UINavigationBar.appearance().barTintColor = Colors.redColor()
    UINavigationBar.appearance().tintColor = UIColor.white
    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white, NSFontAttributeName: UIFont.systemFont(ofSize: 14, weight: UIFontWeightBold)]
    return self
}
person Saurabh Shukla    schedule 07.07.2017