       return control
    }()
    
+   fileprivate var _footerViewTopSpaceConstraint: NSLayoutConstraint!
+   fileprivate var _footerViewBottomSpaceConstraint: NSLayoutConstraint!
+   
    fileprivate lazy var _footerContainerView: UIView = {
       let footerView = UIView(frame: .zero)
       footerView.translatesAutoresizingMaskIntoConstraints = false

   
   private func _update(footerView: UIView) {
      _footerContainerView.subviews.forEach { $0.removeFromSuperview() }
      
      _footerContainerView.addSubview(footerView)
      
      NSLayoutConstraint.activate([
         footerView.centerXAnchor.constraint(equalTo: _footerContainerView.centerXAnchor),
         footerView.centerYAnchor.constraint(equalTo: _footerContainerView.centerYAnchor),
         _footerContainerView.heightAnchor.constraint(equalTo: footerView.heightAnchor),
         ])
   }
}


   fileprivate var _elements: [Elemental] = []
   
   // MARK: - Public Properties
   public var footerViewTopPadding: CGFloat = 0 {
      didSet {
         _footerViewTopSpaceConstraint.constant = footerViewTopPadding
      }
   }
   
   public var footerViewBottomPadding: CGFloat = 0 {
      didSet {
         _footerViewBottomSpaceConstraint.constant = -footerViewBottomPadding
      }
   }
   
   public var footerView: UIView? {
      didSet {
         switch footerView {
