Раскадровка UICollectionViewCell обнаруживается, затем гаснет - PullRequest
0 голосов
/ 05 мая 2018

Проблема:

Я работаю над UIViewController на моем Storyboard / Interface Builder, с UICollectionView, который определяет UICollectionViewCell. Каждый раз, когда я что-то меняю в этой ячейке, все ее подпредставления становятся белыми, что делает невозможным что-либо увидеть. Также, когда я обновляю ограничения, рамка не будет двигаться, даже если я обновлюсь, как будто весь конструктор интерфейса сломан. Это только для этого UIViewController, иногда делает это для другого. Интерфейсный билдер показывает предупреждения от модулей (я ничего не могу поделать). У меня нет нарушенных ограничений.

(Очень) Временное решение:

Если я выйду из Xcode, очистю, перестрою и заново открою раскадровку, он вернется к «почти» нормальному состоянию (то есть не все представления отображаются должным образом, но, по крайней мере, я их вижу, и он не полностью белый), пока я не переключусь в другой файл и вернуться. Когда я вернусь к раскадровке снова будет пустым. Иногда мне приходится удалять свои DerivedData, и ячейка будет отображаться идеально. Всего на несколько минут.

Кроме того, у меня нет предупреждений об ограничениях или чего-либо еще.

EDIT : Я удалил все классы из всех представлений в ячейке, на случай, если что-то в моих пользовательских представлениях вызывало эти проблемы. Мои представления в основном реализуют слои и градиенты, поэтому я подумал, что, возможно, что-то неправильно делал, нарушая рендеринг IB. Вверху ячейки есть пользовательский UIView, который я сделал, который использует CAGradientLayer. Если я удалю класс из этого представления, ячейка снова начнет отображаться. Но я не могу быть уверен, что это является причиной, поскольку, когда я покидаю раскадровку и возвращаюсь к ней, ячейка снова становится белой. Не возвращая класс на место.

EDIT2 : Я удалил и переустановил Xcode и cocoapods. Обновил стручки. Создан новый xcworspace.

Скриншот

enter image description here

enter image description here

Подробная информация о моем окружении

Я использую Swift, XCode 9.3, Cocoapods 1.5.0, High Sierre 10.13.4 Не стесняйтесь спрашивать любые другие детали Мои модули (которые генерируют много предупреждений благодаря совместимости с swift 4):

  pod 'FBSDKLoginKit'
  pod 'FBSDKCoreKit'
  pod 'FSPagerView'
  pod 'CropViewController'
  pod 'SwiftLint'
  pod 'Parse'
  pod 'Parse/FacebookUtils'
  pod 'ImagePicker'
  pod 'XLPagerTabStrip', '~> 8.0'
  pod 'Eureka'

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Может быть одной из ваших зависимостей, посмотрите на проблемы на этих зависимостях .

Попробуйте удалить свои зависимости одну за другой.

0 голосов
/ 11 мая 2018

Проблема была вызвана Cocoapods Xcode.

Сначала я понял, клонировав свой проект на другом компьютере, что мой Xcode не отображал ошибки Interface Builder, а только предупреждал.

Как отобразить ошибки Interface Builder?

На левой панели в Xcode (с иерархией файлов) щелкните по последнему элементу, похожему на комический пузырь. Вы увидите ошибки сборки, рабочей области и построителя интерфейса. Мой Xcode по какой-то причине не отображал ничего, поэтому я повторно установил Xcode.

Как правильно переустановить Xcode?

Просто удалите все эти файлы:

/Applications/Xcode.app
/Library/Preferences/com.apple.dt.Xcode.plist
~/Library/Preferences/com.apple.dt.Xcode.plist
~/Library/Caches/com.apple.dt.Xcode
~/Library/Application Support/Xcode
~/Library/Developer
~/Library/Developer/Xcode
~/Library/Developer/CoreSimulator

Источник: Как полностью удалить Xcode и удалить все настройки

Затем Xcode показал мне эту ошибку:

enter image description here

Наконец, я могу подтвердить, что удаление pod, связанного с этой структурой, перестанет ломать мою раскадровку. Просматривая больше в интернете, я обнаружил, что это актуальная проблема, связанная с подписанием Frameworks, вызванная какао-бобами.

Я удалил Cocoapods 1.5.0 и переустановил 1.4.0 версию.

sudo gem uninstall cocoapods
sudo gem install cocoapods -v 1.4.0

Источник: Xcode - @IBDesignables - для X.framework отсутствует обязательное подписание кода

Все проблемы исправлены.

0 голосов
/ 08 мая 2018

Вы должны вызвать суперпредставителя в методе awakeFromNib .

Вы должны вызвать супер реализацию awakeFromNib, чтобы предоставить родительским классам возможность выполнить любую дополнительную инициализацию, которая им требуется.

override func awakeFromNib() {
  super.awakeFromNib()
  setup()
}
...