Как установить положение и размер пользовательского представления XIB в главном контроллере представления?

Я создал собственный класс представления с помощью xib и загрузил этот класс UIView из XIB. Он показывает этот xib, но не устанавливает высоту и ширину, как для UIView в ViewController.swift.

Вывод

CustomView.swift

class CustomView: UIView {

    @IBOutlet weak var contentView: UIView!

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupView()
    }

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

    func setupView() {
        Bundle.main.loadNibNamed("CustomView", owner: self, options: nil)
        self.addSubview(contentView)
    }

}

Изображение CustomView.xib

ViewController.Swift

Class ViewController: UIViewController {
        @IBOutlet weak var view1: UIView!

        override func viewDidLoad() {
            super.viewDidLoad()

            let customView = CustomView()
            customView.frame = view1.frame
            view1.addSubview(customView)
        }
    }

ViewController Image


person AR Tunes    schedule 28.05.2018    source источник


Ответы (1)


Я бы пошел сюда с немного другим подходом к инициализации пользовательского представления. Вот код:

CustomView:

class CustomView: UIView {

    @IBOutlet weak var contentView: UIView!

    class func instanceFromNibWithFrame(_ frame: CGRect) -> UIView {
        guard let view = UINib(nibName: "CustomView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as ?UIView else {
            fatalError("CustomView can't be init")
        }
    view.frame = frame
    return view
    }
}

ViewController:

class ViewController: UIViewController {
    @IBOutlet weak var view1: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let customView = CustomView.instanceFromNibWithFrame(view1.bounds)
        view1.addSubview(customView)
    }
}
person Snezhana    schedule 28.05.2018