title: Why isn't UIButton returning correct constraints?
body: <p>In my code below:
  I have 5 buttons added into a vertical scrollView. Each button is constrained to the scrollViews's top + 20 ,leading, trailing edges and its height. I have created a <code>b1HeightConstraint</code> variable. It's there to hold the heightConstraint of the <code>b1</code> button. </p>
  
  <p>In a button click, I'm trying to remove this constraint. Yet I'm facing an odd issue:</p>
  
  <p>When I log the constraints I only see 2 constraints, even though I've added 4 constraints to it. My the view debug hierarchy is like below: </p>
  
  <p><a href="https://i.stack.imgur.com/BUJE0.png" rel="noreferrer"><img src="https://i.stack.imgur.com/BUJE0.png" alt="enter image description here"></a></p>
  
  <pre><code>import UIKit
  import Foundation
  
  class ViewController: UIViewController {
      var filterView: UIView!
      var scrollView: UIScrollView!
      var containerView: UIView!
  
      override func loadView() {
          filterView = UIView()
          view = filterView
          view.backgroundColor = #colorLiteral(red: 0.909803926944733, green: 0.47843137383461, blue: 0.643137276172638, alpha: 1.0)
  
          scrollView = UIScrollView()
          scrollView.backgroundColor = #colorLiteral(red: 0.474509805440903, green: 0.839215695858002, blue: 0.976470589637756, alpha: 1.0)
          view.addSubview(scrollView)
          scrollView.translatesAutoresizingMaskIntoConstraints = false
          scrollView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
          scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
          scrollView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
          scrollView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 1).isActive = true
          scrollView.isScrollEnabled = true
  
          containerView = UIView()
          containerView.backgroundColor = #colorLiteral(red: 0.176470592617989, green: 0.498039215803146, blue: 0.756862759590149, alpha: 1.0)
          scrollView.addSubview(containerView)
          containerView.translatesAutoresizingMaskIntoConstraints = false
  
          // This is key:  connect all four edges of the containerView to
          // to the edges of the scrollView
          containerView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
          containerView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
          containerView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
          containerView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
  
          // Making containerView and scrollView the same height means the
          // content will not scroll vertically
          containerView.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
      }
  
  
  
      let b1 = Buttons(titleText: "one")
      let b2 = Buttons(titleText: "two")
      let b3 = Buttons(titleText: "three")
      let b4 = Buttons(titleText: "four")
      let b5 = Buttons(titleText: "five")
      var b1HeightConstraint : NSLayoutConstraint?
  
      override func viewDidLoad() {
          super.viewDidLoad()
  
  
          let buttonArray = [b1, b2, b3, b4, b5]
  
          b1.button.addTarget(self, action: #selector(ViewController.shrink(_:)), for: .touchUpInside)
  
          var startPoint = containerView.topAnchor
  
          for btn in buttonArray {
              let theBtn = btn.button
              containerView.addSubview(theBtn)
              theBtn.translatesAutoresizingMaskIntoConstraints = false
              theBtn.topAnchor.constraint(equalTo: startPoint, constant: 20).isActive = true
              theBtn.leadingAnchor.constraint(equalTo: containerView.leadingAnchor).isActive = true
              theBtn.trailingAnchor.constraint(equalTo: containerView.trailingAnchor).isActive = true
              theBtn.heightAnchor.constraint(equalTo: scrollView.heightAnchor).isActive = true
  
              startPoint = theBtn.bottomAnchor
              let btnHeight = theBtn.heightAnchor.constraint(equalTo: scrollView.heightAnchor)
              if btn == b1{
                  b1HeightConstraint = btnHeight
              }
          }
  
          containerView.bottomAnchor.constraint(equalTo: startPoint, constant: 20).isActive = true
  
      }
  
      @objc func shrink(_ sender: Any){
          guard let btn = sender as? UIButton else{
              return
          }
          print("count is: \(btn.constraints.count)")
  
          btn.removeConstraint(b1HeightConstraint!)
          containerView.removeConstraint(b1HeightConstraint!)
          print("count is: \(btn.constraints.count)")
          containerView.updateConstraintsIfNeeded()
          containerView.updateConstraints()
          scrollView.updateConstraintsIfNeeded()
          scrollView.updateConstraints()
      }
  }
  
  class Buttons : NSObject {
      let button = UIButton()
      init(titleText: String) {
          button.backgroundColor = #colorLiteral(red: 0.976470589637756, green: 0.850980401039124, blue: 0.549019634723663, alpha: 1.0)
          button.setTitle(titleText, for: .normal)
      }
  }
  </code></pre>
  
  <p><sub>The code is ready to just be dumpped in the ViewController class. Works out of the box. My code is a spinoff of the code written <a href="https://stackoverflow.com/a/51688252/5175709">here</a></sub></p>