UIStackView Distribution Fill Equally

autolayout, constraints, ios, swift, uistackview

Solution

As a confirmation, this is the current behavior:

And this is required one:

You can follow this simple trick to achieve it:

P.S: I assume that you added the needed appropriate constraints for your stack view.

If your stack view doesn't have a "height" constraint, add one:

Now, add it as an `IBOutlet` to the assigned ViewController; In my example, I'm calling it `stackHeight`:

@IBOutlet weak var stackHeight: NSLayoutConstraint!

In the event that you want to hide the view (in my example, I'm hiding the orange button based on `IBAction` assigned to itself, when tapping on it, should be hidden), you need to get the height of the view that you want to hide and subtract from `stackHeight.constant`:

    @IBAction func orangeTapped(_ sender: AnyObject) {
        orange.isHidden = true
        
        // here we go:
        stackHeight.constant = stackHeight.constant - orange.frame.size.height
    }

Problem

So, I have a `UIStackView` that contains four (4) `UIView`s. If I remove one (1) of those `UIView`s, the other three (3) will fill the entire space in the `UIStackView`. MY QUESTION: How can I add a max height on a `UIView` so that it won't fill the entire space of the `UIStackView` even though the distribution is filled equally? I read something about adding a constraint but I'm not able to make it work. I'm using swift by the way. Thank you.

Original source