Интерфейс IBDesignable не отображается в Xcode 9 с Swift
Я пытаюсь использовать мои собственные файлы XIB. Но эти пользовательские интерфейсы не отображаются на главном экране контроллера в xcode. Но это показывает, когда запустить приложение. Я уже добавил @IBDesignable в классе. Вот что я сделал.
Я создал TestView.xib и добавил дизайн
Я создал TestView.swift
Я обновил файл владелец TestView.xib с TestView в пользовательском классе
Я добавил код инициализации в 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)
}
}
И добавлен на UIView в MainViewController и ссылку на TestView с именем пользовательского класса.
После этого я запускаю приложение и вижу интерфейс пользователя из testView. Изображение эмулятора и результат
- Но мой пользовательский интерфейс не отображается в 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
}