Untitled

mail@pastecode.io avatar
unknown
swift
2 years ago
1.3 kB
1
Indexable
Never
import UIKit

//@IBDesignable
class XibView: UIView {
  
  var viewFromNib: UIView? {
    let typeOfSelf = type(of: self)
    let name = String(describing: typeOfSelf)
    let bundle = Bundle(for: typeOfSelf)
    let nib = UINib(nibName: name, bundle: bundle)
    return nib.instantiate(withOwner: self, options: nil).first as? UIView
  }
  
  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    xibSetup()
  }

  override init(frame: CGRect) {
    super.init(frame: frame)
    xibSetup()
  }
  
  private func xibSetup() {
    guard let view = viewFromNib else { return }
    pin(subView: view)
  }
}

extension UIView {
    func pin(subView: UIView, withInsets insets: UIEdgeInsets = .zero, rectEdge: UIRectEdge = .all) {
        subView.translatesAutoresizingMaskIntoConstraints = false
        addSubview(subView)
        subView.leadingAnchor.constraint(equalTo: leadingAnchor, constant: insets.left).isActive = rectEdge.contains(.left)
        subView.topAnchor.constraint(equalTo: topAnchor, constant: insets.top).isActive = rectEdge.contains(.top)
        subView.bottomAnchor.constraint(equalTo: bottomAnchor, constant: insets.bottom).isActive = rectEdge.contains(.bottom)
        subView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: insets.right).isActive = rectEdge.contains(.right)
    }
}