IBDesignable XIB выдает ошибку из-за метода загрузки - PullRequest
0 голосов
/ 16 мая 2018

Оба эти результата приводят к тому, что код работает правильно, но с использованием функции loadNibNamed приводит к ошибке рендеринга IB:

Bundle.main.loadNibNamed("myXib", owner: self, options: nil)
self.view.frame = bounds
self.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.addSubview(self.view)

со следующей ошибкой для Designables IB:

error

, в то время как использование этого корректно отображается в IB:

guard let view = loadViewFromNib(name: "myXib") else {return}
view.frame = bounds
view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.addSubview(view)

func loadViewFromNib(name : String) -> UIView? {
    let bundle = Bundle(for: type(of: self))
    let nib = UINib(nibName: name, bundle: bundle)
    return nib.instantiate(withOwner: self, options: nil).first as? UIView
}

Любые идеи приветствуются.

1 Ответ

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

Вы не должны использовать Bundle.main при загрузке XIB, потому что IB не знает, какой у вас основной пакет. Вы должны всегда находить связку в зависимости от местоположения некоторого класса, например. что сделано в вашем втором примере:

Bundle(for: type(of: self))

Хотя использование типа владельца также небезопасно, если в вашем приложении более одного модуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...