     layoutIfNeeded()
   }
 
+  private func setupConstraints() {
+    // TODO
+  }
+
   public override func updateConstraints() {
     removeConstraints(constraints)
     tvosImageView.removeConstraints(tvosImageView.constraints)
     tvosTextLabel.removeConstraints(tvosTextLabel.constraints)
     tvosTitleLabel.removeConstraints(tvosTitleLabel.constraints)
-    // TODO: Add Constraints
+    setupConstraints()
     super.updateConstraints()
   }
 }

  public var image: UIImage?
  public var gravity: TVOSButtonImageGravity = .Fill
  public var shadow: TVOSButtonShadow?
}

// MARK: - TVOSButtonText


  private func commonInit() {
    // setup subviews
    tvosContainerView = UIView()
    tvosContainerView.translatesAutoresizingMaskIntoConstraints = false
    addSubview(tvosContainerView)
    tvosImageView = UIImageView()
    tvosImageView.translatesAutoresizingMaskIntoConstraints = false
    tvosContainerView.addSubview(tvosImageView)
    tvosTextLabel = UILabel()
    tvosTextLabel.translatesAutoresizingMaskIntoConstraints = false
    tvosContainerView.addSubview(tvosTextLabel)
    tvosTitleLabel = UILabel()
    tvosTitleLabel.translatesAutoresizingMaskIntoConstraints = false
    tvosContainerView.addSubview(tvosTitleLabel)
    // add state observer
    addObserver(self, forKeyPath: "state", options: .New, context: nil)
    // finalize
