The correct answer is here:
https://stackoverflow.com/a/43110590/566360
UILabel
inside a UIView
(Editor -> Embed In -> View)UILabel
to the UIView
(for example, trailing space, top space, and leading space to superview constraints)The UIStackView
will stretch out the UIView
to fit properly, and the UIView
will constrain the UILabel
to multiple lines.
For a horizontal stack view that has a UILabel
as one of its views, in Interface Builder firstly set label.numberOfLines = 0
. This should allow the label to have more than 1 line. This initially failed to work for me when the stack view had stackView.alignment = .fill
. To make it work simply set stackView.alignment = .center
. The label can now expand to multiple lines within the UIStackView
.
The Apple documentation says
For all alignments except the fill alignment, the stack view uses each arranged view’s intrinsicContentSize property when calculating its size perpendicular to the stack’s axis
Note the word except here. When .fill
is used, the horizontal UIStackView
does NOT resize itself vertically using the arranged subviews' sizes.
multiLine
unless you give it a fixed width. When we fix its width then it break to multiline when that width is reached as shown:If we don't give a fixed width to the stack view then things get ambiguous. How long will the stack view grow with the label (if the label value is dynamic)?
Hope this can fix your issue.
Setting preferredMaxLayoutWidth to the UILabel worked for me
self.myLabel.preferredMaxLayoutWidth = self.bounds.size.width;
After trying all above suggestion I found no properties change is need for the UIStackView. I just change the properties of the UILabels as following (The labels are added to a vertical stack view already):
Swift 4 example:
[titleLabel, subtitleLabel].forEach(){
$0.numberOfLines = 0
$0.lineBreakMode = .byWordWrapping
$0.setContentCompressionResistancePriority(UILayoutPriority.required, for: .vertical)
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With