Взгляд IBDesignable вызывает бесконечную перестройку
Я пишу подкласс UIView, который использует как IBInspectable, так и IBDesignable. Я не делаю ничего необычного, но мой подкласс заставляет Xcode 6.2 бесконечно перестраивать проект. Мой инспектор удостоверений показывает это колебание состояния под заголовком "Обозначения":
!['Designables' state oscillating between 'Updating' and 'Up to date']()
Каждый раз, когда сборка перезапускается, инспектор теряет фокус. Это затрудняет редактирование чего-либо из IB, что в первую очередь поражает цель написания этого класса.
Вот реализация моего DesignableTestView:
import UIKit
@IBDesignable class DesignableTestView: UIView {
@IBInspectable var testBackground:UIColor? {
didSet {
if testBackground != nil {
self.backgroundColor = testBackground
}
}
}
}
Есть ли способ изменить мой код или настройки Xcode, чтобы предотвратить постоянную перестройку?
Ответы
Ответ 1
Мне интересно, является ли этот класс класса видимости частью текущей цели. В видеоролике WWDC 2014 What New in Interface Builder в демонстрации Live Views они описывают, что первым шагом является обеспечение того, чтобы класс, отдельную целевую платформу. Это видео демонстрирует процесс создания этой целевой целевой среды в рамках проекта.
Если это не проблема. Я бы предложил очистить свой проект ( "Очистить" в меню "Продукт" ) и перестроить только пользовательскую фреймворческую цель, чтобы убедиться, что все нормально, прежде чем пытаться что-либо сделать в IB. Внизу, убедитесь, что структура может быть построена без инцидентов. Если проблема по-прежнему сохраняется после этого, я перейду на следующий уровень и (а) найду папку с данными Xcode; (б) выйти из Xcode; (c) очистить папку с производными данными, (d) перезапустить Xcode и (e) повторить попытку создания цели фрейма.
Ответ 2
У меня все еще была эта проблема (в Xcode 8.3.3) даже после переноса классов IBDesignable в отдельную структуру. Что для меня работало, так это открыть нарушивший Xib файл, снимите флажок "Редактор" > "Автоматическое обновление представлений", а затем перезапустите Xcode.
Ответ 3
Я также все еще имел эту проблему Xcode 9.3 даже после перемещения всех IBDesignables и IBInspectables в отдельную структуру (и очистить все, убить производные данные). IB продолжит перестраивать основную цель и ее зависимости.
Решение, которое я нашел здесь https://www.e-learn.cn/content/wangluowenzhang/307740, решило его:
- удалить все
@IBDesignable
и @IBInspectable
- очистить все, очистить производные данные, закрыть Xcode
- заново откройте Xcode, заставьте IB перестраивать без IBDesignables (Editor → RefreshAllViews не должен быть серым)
- закрыть Xcode
- добавить все
@IBDesignable
и @IBInspectable
обратно - открыть Xcode
- RefreshAllViews должен быть доступен, щелкните по нему.
- вуаля, IB теперь не только перестраивает фреймворк
Очевидно, что в XCode было что-то напуганное, что чистые/убивающие производные данные не стирались.