由于公司里的项目用的都是绝对布局,而不是相对布局,其布局仅用frame+autoresizingMask构成,因此特地学习一下autoresizingMask的使用方法。
概念
autoresizingMask是UIView持有的一个UIViewAutoresizing类型,该类型的取值决定视图随其父视图的变化而产生怎样的变化。
UIViewAutoresizing枚举取值
UIViewAutoresizing主要有6种状态,如下表所示:
UIViewAutoresizing类型 | 视图调整情况 |
---|---|
UIViewAutoresizingNone(默认) | 不会随父视图的改变而改变 |
UIViewAutoresizingFlexibleLeftMargin | 自动调整view与父视图左边距,以保证右边距不变 |
UIViewAutoresizingFlexibleWidth | 自动调整view的宽度,保证左边距和右边距不变 |
UIViewAutoresizingFlexibleRightMargin | 自动调整view与父视图右边距,以保证左边距不变 |
UIViewAutoresizingFlexibleTopMargin | 自动调整view与父视图上边距,以保证下边距不变 |
UIViewAutoresizingFlexibleHeight | 自动调整view的高度,以保证上边距和下边距不变 |
UIViewAutoresizingFlexibleBottomMargin | 自动调整view与父视图的下边距,以保证上边距不变 |
从上表我们可以总结出,枚举中flexible修饰的单词在父视图发生变化的时候是可以灵活改变的,而其它属性却是固定不变的,需要注意的是,这些属性亦可以复合使用,已达到不同的效果,其中最常用的是
UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight
它代表视图的所有边距都与父视图保持不变
同一轴上多个选项设置的情形
当同一个轴线有多个选项进行设置时,分为以下几种情况(仅以横向轴作为例子):
-
UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin
在父视图改变的过程中,保持宽度相等,左右边距的比例也保持相等 -
UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleRightMargin
在父视图改变的过程中,左边距保持相等,宽度与俯视图宽度的比例保持相等 -
UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleLeftMargin
在父视图改变的过程中,右边距保持相等,宽度与俯视图宽度的比例保持相等 -
UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleLeftMargin
在父视图改变的过程中,宽度与父视图的宽度保持相等,左右边距的比例也保持相等