Reputation: 143
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.
Upvotes: 14
Views: 8194
Reputation: 31665
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
}
Upvotes: 18
Reputation: 317
If you don't want to remove the bottom constraint, just set distribution as .fill
and add a transparent UIView
at the end of the stack.
This view will stretch while the others will keep stacked on top.
Upvotes: 1
Reputation: 18503
Remove the constraint on the stack view's bottom edge. Then it will resize to just fit the visible controls.
Upvotes: 6
Reputation: 6892
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 .
Upvotes: 0