Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIStackView with UILabels in Xcode 7.3

Since I've updated to Xcode 7.3 I have a problem with UIStackView. If I create an empty project and just put two UILabels in UIStackView with default hugging and compression priorities, it shows me AutoLayout misplacement error. It even doesn't work with one(!) UILabel in UIStackView, so priorities doesn't matter (as I think, maybe there is the problem).

As I remember in Xcode prior 7.3 everything was fine. I checked on two MacBook Pro separately, it's the same issue.

Does anybody know how to fix it?

enter image description here enter image description here

like image 645
Evgeny Avatar asked Apr 02 '16 12:04

Evgeny


3 Answers

enter image description here This is a bug appears in Xcode 7.3, so you can ignore it as what he said matt.

The problem

The storyboard can not calculate the intrinsic content size of subviews when you use UIStackView

Solution

If you hate seeing warnings in your storyboard you can fixe it like below :

You should do these steps for each subview of your UIStackView

  • Tap the warning of your subview
  • Tap "Update frames" option
  • Choose "Placeholder" of the subview intrinsic size in the fourth menu in the inspector view

Like that you will not see warnings, and you can see if any ambiguities exist

The disadvantage is you should do this steps each time you change your subview (example: changing the size of text of an UILabel)

Hoping that Apple fixes this bug in the next release

like image 135
HamzaGhazouani Avatar answered Oct 05 '22 23:10

HamzaGhazouani


Ignore the warnings. The storyboard has never quite understood stack views. The constraints will be correct at runtime and that's all that matters.

like image 34
matt Avatar answered Oct 05 '22 23:10

matt


I have a different trick for eliminating the warnings and making 'update frames' work properly.

Advantage:

Doesn't require changing placeholder values every time text changes

Disadvantage:

Extra views that are unnecessary when Xcode 8 comes out

Steps:

  • Embed each UILabel inside a UIView.
  • Constrain the UIView to size itself based on the label (match leading, trailing, bottom, and top)

It seems like UIStackView (in Xcode 7) can't understand the intrinsic content size of a label, but CAN understand the intrinsic content size of a view - so put the label in a view and presto!

enter image description here

like image 25
charmingToad Avatar answered Oct 06 '22 01:10

charmingToad