I am trying to add constraints programmatically for 3 different views but the height of the views is not adding properly.
if tags.count == 0 && images.count == 0
{
addConstraintsWithFormat("H:|-05-[v0]-05-|", views: myTableView)
addConstraint(NSLayoutConstraint(item: myTableView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 40))
addConstraint(NSLayoutConstraint(item: myTableView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: -5))
//2
addConstraintsWithFormat("H:|-05-[v0]-05-|", views: bgView)
addConstraint(NSLayoutConstraint(item: bgView, attribute: .top, relatedBy: .equal, toItem: titleLabel, attribute: .top, multiplier: 1.0, constant: 2))
addConstraint(NSLayoutConstraint(item: bgView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: -2))
}
else if tags.count != 0 && images.count == 0{
//1
addConstraintsWithFormat("H:|-05-[v0]-05-|", views: myTableView)
addConstraint(NSLayoutConstraint(item: myTableView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 40))
//2
addConstraintsWithFormat("H:|-10-[v0]-05-|", views: tagsView)
addConstraint(NSLayoutConstraint(item: tagsView, attribute: .top, relatedBy: .equal, toItem: myTableView, attribute: .bottom, multiplier: 1.0, constant: 15))
addConstraint(NSLayoutConstraint(item: tagsView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: -5))
//3
addConstraintsWithFormat("H:|-05-[v0]-05-|", views: bgView)
addConstraint(NSLayoutConstraint(item: bgView, attribute: .top, relatedBy: .equal, toItem: titleLabel, attribute: .top, multiplier: 1.0, constant: 2))
addConstraint(NSLayoutConstraint(item: bgView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: -2))
}
else if tags.count != 0 && images.count != 0{
//1
addConstraintsWithFormat("H:|-05-[v0]-05-|", views: myTableView)
addConstraint(NSLayoutConstraint(item: myTableView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 40))
//2
addConstraintsWithFormat("H:|-10-[v0]-05-|", views: tagsView)
addConstraint(NSLayoutConstraint(item: tagsView, attribute: .top, relatedBy: .equal, toItem: myTableView, attribute: .bottom, multiplier: 1.0, constant: 5))
addConstraint(NSLayoutConstraint(item: tagsView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: -70))
//3
addConstraintsWithFormat("H:|-05-[v0]-05-|", views: picsCollectionView)
addConstraint(NSLayoutConstraint(item: picsCollectionView!, attribute: .top, relatedBy: .equal, toItem: tagsView, attribute: .bottom, multiplier: 1.0, constant: 5))
addConstraint(NSLayoutConstraint(item: picsCollectionView!, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: -5))
//4
addConstraintsWithFormat("H:|-05-[v0]-05-|", views: bgView)
addConstraint(NSLayoutConstraint(item: bgView, attribute: .top, relatedBy: .equal, toItem: titleLabel, attribute: .top, multiplier: 1.0, constant: 2))
addConstraint(NSLayoutConstraint(item: bgView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: -2))
}
extension UIView {
func addConstraintsWithFormat(_ format: String, views: UIView...) {
var viewsDictionary = [String:UIView]()
for(index, view) in views.enumerated() {
let key = "v\(index)"
view.translatesAutoresizingMaskIntoConstraints = false
viewsDictionary[key] = view
}
addConstraints(NSLayoutConstraint.constraints(withVisualFormat: format, options: NSLayoutConstraint.FormatOptions(), metrics: nil, views: viewsDictionary ))
}
}