UIStackView Distribution Fill Equally

2019-01-06 21:19发布

问题:

So, I have a UIStackView that contains four (4) UIViews. If I remove one (1) of those UIViews, 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.

回答1:

If I'm not mistaking, what are you facing is:

And what are you asking for is:

Well, if that's your case -and I hope it is-, I achieved this by doing a pretty simple trick:

P.S: I assume that you added the approrpriate constraints for your stackView.

If your stackView 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!

On the event that you want to hide the view -in my example, I'm hiding the orange button besed on IBAction assinged 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
    }


回答2:

Remove the constraint on the stack view's bottom edge. Then it will resize to just fit the visible controls.



回答3:

Try changing the "Distribution" property in the Attributes inspector of the stack view to Equal spacing. It should work.

Or you can change it to fill equally to fill the remaining 3 views equally in the Stack view .