在iOS中使用autolayout调整内容大小的UILabel
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在iOS中使用autolayout调整内容大小的UILabel相关的知识,希望对你有一定的参考价值。
我试图了解使用内在内容大小的动态布局的基本。如图所示,我有两个水平的UILabel,这将是我的默认布局。如何使布局约束这样做
- 如果两个标签中的任何一个的内容大小大于另一个,则应该以垂直堆栈排列
- 此外,如果两个标签中的任何一个内容大小大于一行,我们如何使文本增长满足垂直排列
答案
您可以向stackView添加两个标签,如果使用UIScreen.main.bounds.width
的intrinsicContentSize和check的总和减去stackView的左右边距。
if (label1.intrinsicContentSize.width + label2.intrinsicContentSize.width) > (UIScreen.main.bounds.width - 48/* 48 is the left and right margins*/) {
stackView.axis = .vertical
}else {
stackView.axis = .horizontal
}
请记住将标签的numberOfLines设置为0。
另一答案
我能够使用四个约束出口来达到这个条件。
- 将L1和L2视为分别水平放置的第一个Label和第二个Label
- 从L1到superview添加前导空间
- 从L1到superview添加顶部空间
- 为L1> = someValue添加高度
- 为L1添加尾随空格,其值> = someValue,优先级为999
- 将前导空间从L2添加到L1的前导,给予低优先级并建立nsconstraint插座连接
- 将L2中的水平空间添加到L1,提供低优先级并建立nsconstraint插座连接
- 将对齐顶部从L2添加到L1,给予低优先级并建立nsconstraint插座连接
- 将垂直空间从L2添加到L1,给予低优先级并建立nsconstraint插座连接
- 为L2> = someValue添加高度
- 为L2添加尾随空格,其值> = someValue,优先级为999
let firstWidth : CGFloat = (firstLabel?.intrinsicContentSize.width)! let secondWidth : CGFloat = (secondLabel?.intrinsicContentSize.width)! if (firstWidth + secondWidth) <= self.view.frame.size.width - 45.0 { secondLabelLeadingConstraintTofirstLabelLeading?.priority = UILayoutPriority(rawValue: 250) secondLabelSpacingConstraintTofirstLabel?.priority = UILayoutPriority(rawValue: 1000) secondLabelTopConstraintTofirstLabelTop?.priority = UILayoutPriority(rawValue: 1000) secondLabelTopConstraintTofirstLabelBottom?.priority = UILayoutPriority(rawValue: 250) } else { secondLabelLeadingConstraintTofirstLabelLeading?.priority = UILayoutPriority(rawValue: 1000) secondLabelSpacingConstraintTofirstLabel?.priority = UILayoutPriority(rawValue: 250) secondLabelTopConstraintTofirstLabelTop?.priority = UILayoutPriority(rawValue: 250) secondLabelTopConstraintTofirstLabelBottom?.priority = UILayoutPriority(rawValue: 1000) }
以上是关于在iOS中使用autolayout调整内容大小的UILabel的主要内容,如果未能解决你的问题,请参考以下文章
使用 Autolayout iOS8 自动调整 UI 组件的大小
使用 AutoLayout 调整 UICollectionViewCell 及其内容的大小
使用 AutoLayout 和 iOS 8 为不同设备调整 UICollectionViewCell 的大小