Неправильный цвет фона XCode 8 - обновлено цветовое пространство раскадровки

После обновления до XCode 8 я заметил, что некоторые из моих представлений (выложенных в Interface Builder) теперь имеют неправильные цвета.

В частности, у меня есть два пользовательских представления на моей странице входа, которые обычно имеют белый фон. После обновления до XCode 8 цвет их фона стал четким! Выглядит ужасно.

Я провел некоторое расследование и нашел это от Apple:

Значения цвета в документах Interface Builder правильно используют цветовое пространство во время рендеринга и компиляции. Более ранние версии Xcode неправильно обрабатывали цветовые пространства, сохраненные в документах iOS и tvOS. Xcode 8 преобразует существующие цвета таким образом, чтобы сохранить их воспринимаемый внешний вид на устройстве, и соответствующим образом обновляет либо цветовое пространство, либо значения компонентов в исходном документе. (7645087)

И, конечно же, когда я смотрю на diff для коммита, который сломал вещи:

Этот:

<rect key="frame" x="8" y="8" width="88" height="48"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>

Был заменен на это:

<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>

Что я могу сделать, чтобы исправить это? Вот некоторые вещи, которые я пробовал:

1) В построителе интерфейса выберите представление и откройте цветовую палитру для цвета фона. Щелкните значок шестеренки и выберите SRGB. Пробовал и другие профили, ничего не работает.

2) Попытался восстановить файл XIB. Не могу этого сделать, так как это было частью обновления XCode 8. Это изменение цветовых профилей происходит, когда вы вызываете «Обновить кадры» для контроллера представления после выбора нужного размера iPhone.

Кто-нибудь есть какие-либо другие предложения были бы так полезны!


person John Anderson    schedule 09.10.2016    source источник


Ответы (2)


Невероятный.

В моем пользовательском представлении (подкласс UIView) у меня был метод «commonInit», который содержал весь общий код создания экземпляров, вызываемый через «init», «initWithCoder:» или «initWithFrame:»

В этом методе «commonInit» я делал то, что, вероятно, не должен был делать:

self.layer.cornerRadius = 0.5 * self.bounds.size.height;

Каким-то образом это работало на iOS 9.3 + XCode 7, но НЕ на iOS10 + XCode 8

Понятно, почему это не должно работать. Во время создания экземпляра представление еще не было размещено, поэтому его кадр, вероятно, равен {0,0,0,0}.

Решение состояло в том, чтобы переместить этот код в «layoutSubviews».

Остается вопрос, почему поведение привело к четкому фону. Наверное, потому, что угол 0 не поддерживается?

person John Anderson    schedule 09.10.2016

У меня была такая же проблема с пользовательскими представлениями (невозможно установить цвет фона). Путем поиска, проб и ошибок моя проблема была решена. Советы по устранению проблемы следующие:

  1. когда вы откроете xib, появится уведомление «выбрать начальный вид устройства», и будет два варианта; вы можете выбрать «выбрать устройство».

  2. найдите «Документ построителя интерфейса» на правой боковой панели и сбросьте «открыть в» на Xcode 7.x. После этого появится уведомление о сохранении ваших настроек; вы должны выбрать «сохранить и закрыть».

Выполнение этих шагов может решить вашу проблему.

person ZQ.delog    schedule 09.10.2016