iOS中的AutoLayout使用实践总结

2020-01-21 03:08:45刘景俊

    距离上边栏都是50点。 UILabel1与左边栏距离为10,UILabel2左面距离UILabel1为10点。

    因为都具有Intrinsic属性,所以不需要指定size,位置应该也明确了。

    再给UILabel2加一条约束,右侧距离右边栏为10点。(如果view 没有intrinsicContentSize,那么右边的view 会被拉伸)

    因为 UILabel 有intrinsicContentSize 所以2个Labe 必须有一个要被拉伸

    * 1个label 使用自己的intrinsic,另一个填充其他空间

使用场景

1、没有 intrinsicContentSize 的view 使用 priority,将模糊冲突改变成条件布局

2、有 intrinsicContentSize 的view

       改变hugging or compression 的priority,解决intrinsic 冲突

       虽然有intrinsic 只要给出origin 和 size 就可以了,可是使用 unequal constraint 完善布局,避免警告

       主要接口 & 属性

UILabel 的preferredMaxLayoutWidth,如果有多行要设置正确的preferredMaxLayoutWidth,来得到 正确的intrinsicContentSize

systemLayoutSizeFittingSize 调用 intrinsicContentSize

layoutIfNeed 如果有布局变化强制刷新

当视图的内在内容改变时,需要调用 invalidateIntrinsicContentSize ,让系统知道在下次布局时重新计算intrinsicContentSize


// 原有的视图尺寸和现在的不相符,
- (void)layoutSubviews {
 [super layoutSubviews];
 _collectionView.frame = self.bounds;
 if (!CGSizeEqualToSize(self.bounds.size, [self intrinsicContentSize])) {
 [self invalidateIntrinsicContentSize];
 }
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对ASPKU的支持。

 
注:相关教程知识阅读请移步到IOS开发频道。