Ошибки IBDesignable при рендеринге раскадровки

Я попытался следовать некоторым руководствам следующим образом: noreferrer">1 и 2, но когда я пытаюсь отобразить пользовательское представление в раскадровке, я получаю сообщение об ошибке.

Не удалось отобразить и обновить статус автоматического макета для View Controller. Агент выдал исключение.

Это то, что я пробовал до сих пор:

@IBDesignable final class CustomView: UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    private func setup() {
        let customViewNib = loadFromNib()
        customViewNib.frame = bounds
        customViewNib.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleHeight]
        addSubview(customViewNib)
    }

    func loadFromNib() -> UIView {
        let nib = UINib(nibName: "CustomView", bundle: Bundle.main)
        let view = nib.instantiate(withOwner: self, options: nil).first as! UIView
        return view
    }
}

И я установил владельца файла моего пользовательского представления.

Я создал новый пустой проект, решающий эту проблему:

https://github.com/ivangodfather/CustomView

or

https://ufile.io/imr9p

введите здесь описание изображения


person Godfather    schedule 04.01.2018    source источник
comment
Пожалуйста, загрузите все, что находится за этой ссылкой на ufile, на этот сайт. Либо поместите код или изображение здесь.   -  person luk2302    schedule 04.01.2018
comment
К сожалению, я не могу загрузить сюда свой проект.   -  person Godfather    schedule 04.01.2018


Ответы (2)


Проблема, похоже, в комплекте.

let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle)

Для получения дополнительной информации, чтобы получить журналы ошибок, вы можете увидеть этот ответ: https://stackoverflow.com/a/42678873/2000162< /а>

person TomCobo    schedule 04.01.2018

Пожалуйста, попробуйте эту функцию замены

func loadFromNib() -> UIView {
        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: "CustomView", bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
        return view
//        let nib = UINib(nibName: "CustomView", bundle: Bundle.main)
//        let view = nib.instantiate(withOwner: self, options: nil).first as! UIView
//        return view
    }
person karthikeyan    schedule 04.01.2018