ДЕЙСТВИТЕЛЬНО странное поведение цвета приложения?
В 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()