Xcode IB: UIButton hidden but have still buttons space

You should use autolayout. Otherwise it's a nightmare with the new screen sizes.

With autolayout you can do what you ask programmatically: setup the buttons with certain constraints and then when you decide to hide the button remove the constraints that are not needed. It's flexible and powerful but not the easiest way for a beginner.

One simple way to do it is with additional constraints. For instance, if you have buttons 1, 2 and 3 (see screenshot), and you plan to remove button 2, you can add an extra constraint between 3 and 1:

enter image description here

That constraint should have less priority (250 in my example) than the others (1000 by default). That mean that the constraint won't be applied when button 2 is in place (with higher priority constraints).

Then, remove the button instead of hiding it.

[self.button removeFromSuperview];

When you hide the button it still considered by the layout system to take decisions, and it makes layout more complex. If you want to keep the button around make sure it's using strong modifier in the property declaration.


A better approach for above scenario - You dont need to set any autolayout or frames :)

Use UITableView and create custom cell with UIButtons in it.

  1. Set UITableViewCellSelectionStyle to None

  2. Here your button background is same for all cell

  3. Create an array with above button titles

  4. When ever you want to hide buttons just remove it from array.


The modern preferred way of doing so is to use Stack Views. Great tutorial. Requires iOS 9.

You'll find the icon of stack view in the Auto Layout toolbar at the bottom right of the storyboard canvas.

Stack View Button