ДЕЙСТВИТЕЛЬНО странное поведение цвета приложения?

В appDidFinishLaunchingWithOptions, я нарисую все свое приложение красным цветом со следующим кодом.

self.window.tintColor = [UIColor otfRedColor];

Это работает отлично, и когда мое приложение загружается, все элементы навигационной панели являются красными. A - мой контроллер корневого представления.

У меня есть 3 контроллера вида, a, b и c. A вытаскивает текстовую презентацию вида b, которая вытягивает полный модальный вид c. Когда C вытягивается, элементы панели на панели навигации все оттенки серого, это не должно происходить, потому что я не изменял ни оттенка, ни цвета в любом случае после того, как делегат приложения подкрасил окно. Затем я использую

[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];

отклонить VC c и b, но теперь мое ENTIRE приложение окрашено в серый цвет. Я вообще не использовал код оттенка с делегата приложения, почему это происходит? Когда я снова перехожу от А к Б, эти элементы навигационной панели по-прежнему остаются красными.

Код для вытягивания контроллера просмотра B из A:

AthleteAdd *addAthlete = [self.storyboard instantiateViewControllerWithIdentifier:@"addAthlete"];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addAthlete]; 
addAthlete.delegate = self;
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:navigationController animated:YES completion:nil]; 

Код для вытягивания C из B:

    MedicalReleaseVC *medRelease = [self.storyboard instantiateViewControllerWithIdentifier:@"showMedRel"];
    medRelease.delegate = self;
    [self presentViewController:medRelease animated:YES completion:nil];

Кто-нибудь знает, почему это происходит, или есть идея? Я попробовал подкрасить третий контроллер представления как красный 3 отдельных способа, и он по-прежнему оставался серым, а затем, когда все отклонено, все мое приложение серое. Пожалуйста, помогите!

EDIT:

Если это помогает, то, как я решил эту проблему, было установлено следующее в моем appdelegate.m

 self.window.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;

Ответ 1

Я думаю, что это ошибка в обработке iOS7 tintAdjustmentMode при открытии и закрытии листов и popovers. Я видел, как эта ошибка произошла в приложении Apple для родных почтовых приложений, где элементы панели браузера становятся серыми, или, наоборот, они больше не становятся серыми после появления popover.

Чтобы отладить это дальше, я предлагаю подклассифицировать одно из ваших представлений (или непосредственно окно) и реализовать tintColorDidChange. Запишите значение tintAdjustmentMode там. Я боюсь, что это вызывает проблемы с серым оттенком.

Одним из решений было бы заставить UIViewTintAdjustmentModeNormal, но это могло бы иметь эффект без затемнения при открытии popover или листа.

Ответ 2

Мне пришлось поставить

[[[UIApplication sharedApplication] keyWindow] setTintAdjustmentMode:UIViewTintAdjustmentModeNormal];

в моей viewDidLoad, чтобы решить эту проблему. Но, как упоминалось в других ответах, у него есть негативное влияние не на то, чтобы затемнить элементы панели бара, когда всплывающее окно вверх.

Ответ 3

Просто поместите

self.view.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;

в вашем представленииDidLoad, и ваши цвета вернутся в нормальное состояние.

Ответ 4

Есть определенно ошибка. Я заметил, что когда popover затушевывает окно, когда оно появляется, но после того, как я изменил keyWindow.tintAdjustmentMode вручную (для пользовательских представлений и контроллеров модального представления), popover перестанет мерцать, даже если я вернул keyWindow.tintAdjustmentMode обратно в автоматический.

Ответ 5

Когда отображается popover, основной вид TintAdjustmentMode установлен на Dimmed. Это должно быть отменено, когда popover закрыт, но когда вы переходите к новому экрану из popover, это не происходит по какой-то причине.

Я зафиксировал это в UIViewController, отображаемом как popover, переопределить метод ViewWillDisappear и установить TintAdjustmentMode на вид главного контроллера представления на Normal. (В Xamarin я использовал UIApplication.SharedApplication.KeyWindow.RootViewController.View.TintAdjustmentMode = UIViewTintAdjustmentMode.Normal с несколькими проверками нулей на этом пути.)

Ответ 6

Другим решением является НЕ устанавливать окно tintColor и вместо этого использовать соответствующие прокси-серверы и устанавливать tintColor программно (или в Interface Builder) повсюду. Это кажется более безопасным, чем установка глобального окна tintColor, что вызывает странное поведение, особенно после того, как модальности, системные предупреждения и листы действий отклоняются.

Снимите это:

self.window?.tintColor = UIColor.redColor()

Добавьте их:

UINavigationBar.appearance().barTintColor = UIColor.redColor()
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UISegmentedControl.appearance().tintColor = UIColor.orangeColor()