Ошибка IBDesignable Build
Я создал IBDesignable
и IBInspectable
пользовательский класс, чтобы дать тень и угол радиуса для просмотра
Но когда я назначаю класс Designable
для view
, я получаю Designable Build Failed
Это мой код
import Foundation
import UIKit
@IBDesignable
class DesignableView: UIView {
}
@IBDesignable
class DesignableButton: UIButton {
}
@IBDesignable
class DesignableLabel: UILabel {
}
@IBDesignable
class DesignableTableView: UITableView {
}
extension UIView {
@IBInspectable
var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
}
}
@IBInspectable
var borderWidth: CGFloat {
get {
return layer.borderWidth
}
set {
layer.borderWidth = newValue
}
}
@IBInspectable
var borderColor: UIColor? {
get {
if let color = layer.borderColor {
return UIColor(cgColor: color)
}
return nil
}
set {
if let color = newValue {
layer.borderColor = color.cgColor
} else {
layer.borderColor = nil
}
}
}
@IBInspectable
var shadowRadius: CGFloat {
get {
return layer.shadowRadius
}
set {
layer.shadowRadius = newValue
}
}
@IBInspectable
var shadowOpacity: Float {
get {
return layer.shadowOpacity
}
set {
layer.shadowOpacity = newValue
}
}
@IBInspectable
var shadowOffset: CGSize {
get {
return layer.shadowOffset
}
set {
layer.shadowOffset = newValue
}
}
@IBInspectable
var shadowColor: UIColor? {
get {
if let color = layer.shadowColor {
return UIColor(cgColor: color)
}
return nil
}
set {
if let color = newValue {
layer.shadowColor = color.cgColor
} else {
layer.shadowColor = nil
}
}
}
}
Это то, что я получил
![error]()
Ответы
Ответ 1
Не удалось, потому что переменные IBInspectable
используются в другом классе IBDesignable
Следующие шаги решили проблему:
- Переименовать класс
- Очистить проект.
- Выберите раскадровку, перейдите в меню "Редактор" и выполните "Обновить все представления" или выберите "Автоматически обновить представление"; ждать завершения сборки.
Ответ 2
Сначала попробуйте: IBDesignable Build Failed
Для меня, когда я носился над InterfaceBuilder
Designables: Build Failed
, он дает сообщение об ошибке, говорящее что - то вроде
Не удается найти исходные файлы для объявления или...
Итак, я понял, что Xcode не может индексировать мой пользовательский UIView
класса UIView
поэтому я просто оставил Xcode и перезагрузил его, а затем проиндексировал мой собственный файл класса Swift, и InterfaceBuilder смог найти его правильно,
Прежде всего, попробуйте, а затем перейдите к другим вариантам!
Ответ 3
В моем случае в моей раскадровке все элементы работали нормально, пока я не удалил несколько ярлыков в представлении, которые больше не нужны моему пользовательскому интерфейсу.
Не было никаких полезных сообщений ни в журнале сборки, ни в папке DiagnosticReport.
Для меня исправлением было удалить папку DerivedData ("перезагрузка" Xcode) и перестроить проект. Волшебно, раскадровка снова показывает мои пользовательские ручки! :-)
Ответ 4
Я наткнулся на эту проблему, и у меня есть два предложения, которые могут быть полезны:
- В "Навигаторе отчетов" (cmd-9) проверьте журнал сборки "Interface Builder", это отдельная сборка из вашей обычной сборки проекта, там могут быть полезные сообщения об ошибках, а не просто "Сбой сборки".
- Конструкция построителя интерфейса построена для Simulator, то есть архитектуры x86_64. Некоторые части iOS (например, Metal в моем случае) не присутствуют на симуляторе, что приводит к сбоям сборки. Я определил некоторые классы и функции внутри
#if targetEnvironment(simulator)
чтобы хотя бы пройти сборку.
Ответ 5
Я тоже боролся с этим, а затем удалил полученные проекты и перезапустил Xcode, прежде чем он снова сработает. "Отладка выбранных просмотров" всегда была отключена, а конструктивная сборка всегда показывалась как неудачная. Приложение составлено и работает отлично.
Ответ 6
Если ваш CustomClass добавлен в проект в качестве файлов ссылок, это произойдет. Например, вы можете увидеть папку Blue color в Project Explorer, которые являются справочными папками. Если вы копируете классы в наш проект, убедитесь, что выбрано "Копировать элементы, если необходимо".
В моем случае это было проблемой.
Ответ 7
Даже с первыми двумя шагами исправлено мое. 1. Установите класс в DesignableView. 2. Установите модуль в 3. Очистите сборку. 4. Перезапустите Xcode.