Цвет оттенка iOS7 работает только после представления и закрытия другого ViewController

У меня очень странная проблема с цветом оттенка в iOS7.

Когда ViewController, с которым у меня возникают проблемы с первой загрузкой, весь оттенок имеет светло-серый цвет, как будто все неактивно или находится за UIAlertView, который затемнил экран. Кнопки по-прежнему активны и работают нормально, но все они серые. (У меня установлен оранжевый цвет оттенка, подробнее об этом чуть позже).

Вот что странно. Если я представлю, а затем немедленно отклоню другой ViewController, появится весь оранжевый оттенок, и все будет работать, как ожидалось. Это единственный способ добиться появления оттенка - больше ничего не работает.

Я использую одни и те же базовые шаблоны кода во всем приложении, и эта проблема действительно затрагивает только один ViewController. Этот конкретный ViewController представлен UIModalPresentationFullScreen и UIModalTransitionStyleCoverVertical, если они вообще имеют значение.

Вот как настраиваю тонировку:

Во-первых, я установил цвет оттенка для каждого контроллера представления в построителе интерфейса, эти настройки одинаковы как для рабочих, так и для проблемных VC.

Затем я установил глобальный цвет оттенка в моем делегате приложения следующим образом:

    [_window setTintColor:[UIColor orangeColor]];

Эти два работают с большинством моих ViewController'ов, но по какой-то причине не со всеми. Для тех, над которыми он не работал, я использовал несколько различных техник, чтобы заставить цвет оттенка работать. Например:

self.view.tintColor = [UIColor orangeColor];

or

[_myUIBarButtonItem setTitleTextAttributes:
 [NSDictionary dictionaryWithObject:[UIColor orangeColor]
                             forKey:NSForegroundColorAttributeName]
                                           forState:UIControlStateNormal];

или принудительно обновить tintColor:

[_myButtonOutlet setTitleColor:_cancelButtonOutlet.tintColor
                      forState:UIControlStateNormal];

Любые идеи?


person itnAAnti    schedule 12.01.2014    source источник
comment
где / когда вы назначаете tintColor представлению, в viewDidLoad или просто appDelegate?   -  person Yohst    schedule 12.01.2014
comment
В настоящее время в обоих. У меня он был в appDelegate с самого начала, и я также добавил его в viewDidLoad на рассматриваемом VC, когда я понял, что код appDelegate не работает в этом конкретном VC.   -  person itnAAnti    schedule 12.01.2014
comment
Взгляните на это: stackoverflow.com/questions/19026351/ Похоже, применить tintColor не всегда просто. Вы реализовали tintColorDidChange? См. Документацию Apple: developer.apple.com/library/ ios / documentation / userexperience /   -  person Yohst    schedule 13.01.2014
comment
Я просмотрел ссылки, которые вы предоставили. Я уже просматривал этот документ Apple, но на этот раз сделал это более тщательно - безрезультатно.   -  person itnAAnti    schedule 14.01.2014
comment
Я провел еще несколько тестов и хочу добавить больше деталей, которые могут быть полезны. Во-первых, взгляды, с которыми я испытываю затруднения, - это подвиды. Я использую self.view addSubview: для добавления представлений после загрузки и отображения основного представления. Я использовал некоторые операторы NSLog, чтобы вывести оттенок некоторых элементов, с которыми у меня возникли трудности. У них есть набор оранжевого оттенка - он просто не отображается. Я читал, что цвет оттенка должен быть установлен за пределами экрана, поэтому мне интересно, не принимают ли мои вспомогательные представления цвет оттенка, потому что они загружаются после отображения основного представления.   -  person itnAAnti    schedule 14.01.2014
comment
В какой-то момент между viewDidLoad и viewDidAppear цвет оттенка устанавливается на UIDeviceWhiteColorSpace 0.595 0.8.   -  person itnAAnti    schedule 14.01.2014
comment
В этом потоке есть аналогичная проблема, но я не могу явно обновить цвет оттенка всего окна, независимо от того, что я установил и где, он сохраняет старый UIDeviceWhiteColorSpace цвет.   -  person itnAAnti    schedule 14.01.2014


Ответы (1)


В iOS7 есть разные варианты поведения оттенков, которые вы можете выбрать в зависимости от того, что вы хотите.

Все, что вам нужно сделать, это настроить свойство tintAdjustmentMode окна на Normal в didFinishLaunching в делегате приложения.

self.window.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
person Alex Nguyen    schedule 19.05.2014