I'm developing an app for iOS and I'm using the Storyboard with AutoLayout ON. One of my view controllers has a set of 4 buttons, and in certain circumstances i would like to make the first one disappear.
If I use the setHidden:TRUE
method the UIButton become invisible but it still obviously take space in the view, and the result is an "hole" which I've not been able to fill making the remaining UIButton to float towards the top of the main view.
In Android I would have simply used View.GONE
instead of View.INVISIBLE
, but in iOS I'm stuck with this behaviour and I don't want to believe that the only solution is to manually (yes I mean programmatically) move the remaining elements to the top.
I thought I would have been able to do it setting some sort of Constraint to make everything as automatic as it is in Android but I've had no luck.
Before I turn Autolayout OFF, can someone point me to the right direction?
I'm using the IB, but I'm comfortable with programmatic stuff as well.
UPDATE:
Setting the component height to 0 doesn't help as well.
I tried something like this:
UIButton *b;
CGRect frameRect = b.frame;
frameRect.size.height = 0;
b.frame = frameRect;
https://github.com/tazihosniomar/LayoutManager
i hope it will help you .
Building off the answer provided by Deniz, here is a solution using constraints in Swift
For example: If you have 3 views, A_view B_view and C_view vertically aligned in that order and you want to "Hide" B and also adjust the difference, add a constraint
constant is (in this case) the amount of vertical space between C_view and A_view
1) If your buttons are placed vertically then you must set the
height
to 0 and in case of horizontally placed buttons, try settingwidth
to 0 or you can set both to 0.OR
2) you could try this approach which sets
button2
on top ofbutton1
:What you can do is to group your views under a stack view. Then when you hide a particular view, the remaining views will be shifted automatically to fill the space.
You may want to check out the Apple Documentation on Stack Views: https://developer.apple.com/reference/uikit/uistackview
or online tutorials such as: https://www.appcoda.com/stack-views-intro/
Adding a constraint(NSLayoutAttributeHeight) that sets height of the view to 0 worked for me:
setHidden:TRUE/FALSE is the nearest equivalent to Android View.GONE/VISIBLE.
The View not necessarily take space if not visible!
I have made a ComboBox-Alike with a ListView laying on top of other views. I's only visible while selecting: