UILabel约束布局相关

1,700 阅读1分钟

拉伸、压缩

- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis
  • 该方法表示当前的Label的内容不想被拉伸
  • 默认情况下priority == UILayoutPriorityDefaultHigh(750)
- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis 
  • 该方法表示当前的Label的内容不想被压缩
  • 默认情况下priority == UILayoutPriorityDefaultHigh(750)

eg: 如下图所示,两个Label并列在同一排上,左边label自适应,右边label(红色)要使得内容全部展示,如果左边label内容很少,那么右边label随着左边label动,布局代码如下:

//set CompressionResistance  ContentHugging
    distanceLabel.setContentCompressionResistancePriority(.required, for: .horizontal)
    distanceLabel.setContentHuggingPriority(.required, for: .horizontal)
    placeLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
    placeLabel.setContentHuggingPriority(.required, for: .horizontal)

sizeToFit 和 sizeThatFits的使用

  • sizeToFit:会计算出最优的 size 而且会改变自己的size
  • sizeThatFits:会计算出最优的 size 但是不会改变 自己的 size
  • 其实当调用 UIView 的 sizeToFit 后 会调用 sizeThatFits 方法来计算 UIView 的 bounds.size 然后改变 frame.size