iOS Auto Layout学习

目录:[TOC]

介绍

Auto Layout前身是Cassowary,本质上是通过联立线性方程组来描述界面元素之间的位置关系,他的厉害之处在于为界面元素建立关系

本文主要介绍Auto Layout对于界面元素中的内容大小的处理,诸如UILabel或者UIImageView,日常开发中经常要根据内容的多少来拉伸缩放控件的大小,不论是UIIamgeView的Image或者UILabel中的Text。

通用

视图内容的大小可以通过调用视图的intrinsicContentSize(iOS 6.0 后可用)来获取,他是隶属于UIView的实例方法。

UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
    label.text = @"来自lintingmuse的CSDN博客";
    NSLog(@"%@", NSStringFromCGSize(label.intrinsicContentSize));

你可以通过该方法来获得UIButtonUILabelUIImageView的内容未经压缩或裁减的情况下填充内容所需的最小空间。但是他并不能获得UIView的子视图的内容大小。当对没有数据内容的UIView的实例调用intrinsicContentSize时,它将返回UIViewNoIntrinsicMetric。当改变了视图的内在内容时,需要调用invalidateIntrinsicContentSize方法,这样才能让Auto Layout下次布局时重新计算大小。

压缩阻力和内容吸附

压缩阻力指的是保护内容不被裁减或压缩的一种方式。压缩阻力优先级高的视图能够保护内容不被裁减或压缩。

压缩阻力高的视图效果

图a

压缩阻力低的视图效果

图b

图a和图b对比展示了压缩阻力优先级高低对于视图内容展示的影响。图a能完整展示内容,而图b的文字内容被省略。
设置压缩阻力优先级可以通过在IB中设置:

IB中设置压缩阻力的优先级
此处设置的是水平方向的高压缩阻力优先级

也可以通过代码来设置:

[label setContentCompressionResistancePriority:1000 forAxis:UILayoutConstraintAxisHorizontal];

默认情况下的压缩阻力优先级为750,而默认情况下高度和宽度等的约束优先级为1000。而通过调整高度或宽度的约束优先级与压缩阻力的优先级相配合,也就能完美地解决内容大小动态变化时带来的问题。

转载请标明本文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值