在iOS中使用autolayout调整内容大小的UILabel

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在iOS中使用autolayout调整内容大小的UILabel相关的知识,希望对你有一定的参考价值。

我试图了解使用内在内容大小的动态布局的基本。如图所示,我有两个水平的UILabel,这将是我的默认布局。如何使布局约束这样做

  • 如果两个标签中的任何一个的内容大小大于另一个,则应该以垂直堆栈排列
  • 此外,如果两个标签中的任何一个内容大小大于一行,我们如何使文本增长满足垂直排列

AutoLayout

答案

您可以向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 组件的大小

iOS Autolayout 调整标签大小和它们之间的空间

使用 AutoLayout 调整 UICollectionViewCell 及其内容的大小

使用 AutoLayout 和 iOS 8 为不同设备调整 UICollectionViewCell 的大小

在自定义容器视图中旋转时 AutoLayout 不会调整视图大小?

Xamarin iOS Autolayout:自动调整各种设备的宽度和垂直滚动,同时保持水平滚动禁用演示链接