Интерфейс IBDesignable не отображается в Xcode 9 с Swift

Я пытаюсь использовать мои собственные файлы XIB. Но эти пользовательские интерфейсы не отображаются на главном экране контроллера в xcode. Но это показывает, когда запустить приложение. Я уже добавил @IBDesignable в классе. Вот что я сделал.

  1. Я создал TestView.xib и добавил дизайн

  2. Я создал TestView.swift

  3. Я обновил файл владелец TestView.xib с TestView в пользовательском классе

  4. Я добавил код инициализации в testView.swift

Код внутри TestView.swift

import UIKit

@IBDesignable class DetailView: UIView {

override init(frame: CGRect){
    super.init(frame: frame)
    self.setup()
}

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

}

func setup() {
    let view = Bundle.main.loadNibNamed("TestView", owner: self, options: nil)?.first as! UIView
    view.frame = self.bounds
    self.addSubview(view)
}

}
  1. И добавлен на UIView в MainViewController и ссылку на TestView с именем пользовательского класса.

  2. После этого я запускаю приложение и вижу интерфейс пользователя из testView. Изображение эмулятора и результат

  3. Но мой пользовательский интерфейс не отображается в MainViewController в xcode Изображение контроллера представления xcode

Как я могу включить, чтобы увидеть мой пользовательский интерфейс в MainViewController? Спасибо

2 ответа

Решение

Я просто изменил функцию настройки. Это работает сейчас. Итоговое изображение результата - показывает интерфейс в IB

func setup() {
    view = loadViewFromNib()
    view.frame = bounds
    view.autoresizingMask = UIViewAutoresizing(rawValue: UIViewAutoresizing.RawValue(UInt8(UIViewAutoresizing.flexibleWidth.rawValue) | UInt8(UIViewAutoresizing.flexibleHeight.rawValue)))

    self.addSubview(view)
}

func loadViewFromNib() -> UIView {
    let bundle = Bundle(for: type(of: self))
    let nib = UINib(nibName: "TestView", bundle: bundle)
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
    return view
}

В InterfaceBuilder выберите ваш ViewController и выберите "Редактор -> Обновить все представления". Тогда ваш пользовательский вид должен появиться.

Если что-то не так, вы можете отладить ваш класс IBDesignable, установив точки останова в своем коде, а затем выберите "Редактор -> Отладка выбранных представлений".

prepareForInterfaceBuilder() должен быть реализован только в том случае, если вам нужен особый дизайн в InterfaceBuilder.

Иногда необходимо очистить проект и собрать папку, чтобы заставить его работать:
Проект->Clean
Проект ->(удерживая нажатой клавишу настроек)-> Очистить папку сборки

Переопределите две функции ниже для live:

override open func prepareForInterfaceBuilder() {
   layer.cornerRadius = cornerRadius
   layer.borderWidth = borderWidth
}

override open func awakeFromNib() {
   layer.cornerRadius = cornerRadius
   layer.borderWidth = borderWidth
}
Другие вопросы по тегам