UIView的autoresizingMask属性,是用在当一个UIView实例的父控件的尺寸发生变化时,来自动调整UIView实例在父控件中的位置与尺寸的。autoresizingMask属性是一个枚举值,它的枚举成员如下:

  它通过使UIView的上、下、左、右、宽度或高度自动变化来调整。下面分几种情况来讨论这个属性,假设父控件为backgroundView,子控件为subView:

1、当没有使用autoresizingMask属性或autoresizingMask属性的值为UIViewAutoresizingNone的时候,autoresizingMask属性不起作用。此时当backgroundView变化的时候,subView并没有任何反应(frame不变),如下图:

2、当设置subView. autoresizingMask=UIAutoresizingFlexibleBottomMargin或设置subView. autoresizingMask=UIAutoresizingFlexibleRightMargin的时候,发现效果和没有设置一样;

3、当设置subView. autoresizingMask=UIAutoresizingFlexibleLeftMargin的时候,效果如下图:

4、当设置subView. autoresizingMask=UIAutoresizingFlexibleTopMargin的时候,效果如下图:

5、然后看一看组合的情况,多个autoresizingMask属性可以通过“|”组合起来,共同作用。比如当subView. autoresizingMask=UIAutoresizingFlexibleLeftMargin | UIAutoresizingFlexibleTopMargin的时候,效果如下图:

可以看到subView在不断改变left和top方向上和backgroundView的距离,出现了subView一直紧跟着backgroundView右下角的效果;

6、当subView. autoresizingMask=UIAutoresizingFlexibleTopMargin | UIAutoresizingFlexibleBottomMargin的时候,效果如下图:

可以看到subView在不断改变top和bottom方向上和backgroundView的距离,出现了subView一直在垂直方向上居中的效果;

7、如果同时使用4个margin属性,会有以下效果:

可以看到subView在不断改变4个方向上和backgroundView的距离,出现了subView一直居中的效果;

8、由此可知:使用margin类的枚举成员的时候,subView对应方向的边会自动灵活调整和backgroundView相应边的距离,但是subView的尺寸是不变的。所以,在这个过程中,subView的frame.origin可能会变化,而frame.size不变;

9、接下来当subView. autoresizingMask=UIAutoresizingFlexibleWidth的时候,效果如下图:

10、当subView. autoresizingMask=UIAutoresizingFlexibleHeight的时候,效果如下图:

11、共同使用width和height两个枚举成员的这种组合方式是非常常见的,它的效果如下图:

可以看到,subView在不断改变自己的尺寸,保持4个方向上和backgroundView的距离不变,出现了subView一直居中并跟着backgroundView变化的效果;

12、由此可知:使用width和height两个枚举成员的时候,subView会通过变换尺寸来使对应方向上的边与backgroundView的距离保持不变。即是在这个过程中,subView的frame.origin不变,而frame.size会改变;

13、我们还可以将margin和width、height组合起来使用,当subView. autoresizingMask=UIAutoresizingFlexibleWidth |UIAutoresizingFlexibleTopMargin | UIAutoresizingFlexibleBottomMargin的时候,效果如下图:

可以看到subView组合了三个属性,它不断改变自己的宽度(width)保持和backgroundView的左右两边距离不变,同时不断改变上、下两个方向(top、bottom)和backgroundView的距离保持垂直方向上的居中;

14、最后再来看一看一些情况,当组合使用left和width的时候,出现了以下的效果:

我们已经知道,left是要让左边距灵活变化,而width是要保持左右边距不变,这两个似乎相互矛盾的特性使得subView的左边距出现了不规则的变化。为了更清楚了解这种组合的效果,我们同时使用left、right和width,出现了如下效果:

通过这个试验,我们发现,subView在水平方向上不断改变frame.origin和frame.size,达到了随着backgroundView等比例变化的效果。

如果我们同时使用除了none之外的所有的特性,还会出现以下效果:

subView随着backgroundView的变化自动等比例变化,边距、尺寸保持着和backgroundView的固定比例不变。

15、最后,还可以使用数字来指定autoresizingMask属性,从autoresizingMask属性的定义可以看到,每个特性对应着一个二进制数的某个数位。根据这个定义,由于十进制数63等于二进制数B111111,当指定subView. autoresizingMask=63时,则相当于六个数位全部指定为1,所有的特性都会起作用,即是最后一张图的效果。

如果要做出和subView. autoresizingMask=UIAutoresizingFlexibleTopMargin | UIAutoresizingFlexibleBottomMargin相同的效果,查阅autoresizingMask的定义可知,指定subView. autoresizingMask=40即可(40=B101000,两个1对应位置的特性会起作用)。

16、通过以上的测试,我们可以得到以下结论:

(1)、margin类的特性会改变对应边与父控件的边距、不改变尺寸,即是会影响到frame.origin,不会影响到frame.size;

(2)、width和height特性不会改变相应边与父控件的边距、但会改变尺寸,即是会影响到frame.size,不会影响到frame.origin;

(3)、多个特性可以组合使用,共同发生作用;

(4)、有重叠作用的特性组合使用,会有等比例变化的效果;

(5)、可以使用数字来指定autoresizingMask属性,数字转换成二进制数后,由最后六位数字决定哪些特性起作用。

格而知之2:UIView的autoresizingMask属性探究的更多相关文章

  1. 关于UIView 的autoresizingMask属性,即UIViewAutoresizing

    enum {   UIViewAutoresizingNone                 = 0,   UIViewAutoresizingFlexibleLeftMargin   = 1 &l ...

  2. UIView 的 autoresizingMask 属性 详解。

    转载自:liubo0_0的专栏  链接网址:http://blog.csdn.net/liubo0_0/article/details/7085935 在 UIView 中有一个autoresizin ...

  3. UIView 的autoresizingMask属性

    autoresizingMask属性的意思就是自动调整子控件与父控件中间的位置,宽高,定义如下: typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) ...

  4. 关于UIView的AutoresizingMask属性的研究

    在 UIView 中有一个autoresizingMask的属性,它对应的是一个枚举的值(如下),属性的意思就是自动调整子控件与父控件中间的位置,宽高. 1 2 3 4 5 6 7 8 9 enum  ...

  5. 关于UIView的autoresizingMask属性的研究【转】

    在 UIView 中有一个autoresizingMask的属性,它对应的是一个枚举的值(如下),属性的意思就是自动调整子控件与父控件中间的位置,宽高. 1 2 3 4 5 6 7 8 9 enum  ...

  6. UIView的autoresizingMask属性

    今天做相册列表的时候,发现有些 UITableViewController 属性不好记忆,然后就查找了一些资料.做一下备份. 在 UIView 中有一个autoresizingMask的属性,它对应的 ...

  7. ios开发之--关于UIView的autoresizingMask属性的研究

    在 UIView 中有一个autoresizingMask的属性,它对应的是一个枚举的值(如下),属性的意思就是自动调整子控件与父控件中间的位置,宽高. enum { UIViewAutoresizi ...

  8. UIView的autoresizingMask属性研究

    在 UIView 中有一个autoresizingMask的属性,它对应的是一个枚举的值(如下),属性的意思就是自动调整子控件与父控件中间的位置,宽高. 1 2 3 4 5 6 7 8 9 enum  ...

  9. 转-关于UIView的autoresizingMask属性的研究

    在 UIView 中有一个autoresizingMask的属性,它对应的是一个枚举的值(如下),属性的意思就是自动调整子控件与父控件中间的位置,宽高. 1 2 3 4 5 6 7 8 9 enum  ...

随机推荐

  1. UESTC_秋实大哥搞算数 2015 UESTC Training for Data Structures<Problem N>

    N - 秋实大哥搞算数 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Subm ...

  2. 所闻所获5:关于iOS的证书

    去年做ondine时,被iOS的证书搞得很是头大,做完了之后感觉一片混乱,印象也不是很深.最近又发布了meditashayne,个人的第二个App,也就重温了一下证书的一些相关操作.这一次的理解比较深 ...

  3. onvif规范的实现:使用gSOAP创建SOAP调用实例

    预备知识 ONVIF规范中设备管理和控制部分所定义的接口均以Web Services的形式提供.ONVIF规范涵盖了完全的XML及WSDL的定义.每一个支持ONVIF规范的终端设备均须提供与功能相应的 ...

  4. JavaScript面向对象精要

    来自:淡忘~浅思. 链接:http://www.ido321.com/1585.html 和 http://www.ido321.com/1586.html 数据类型   在JavaScript中,数 ...

  5. Android中进程生命周期的优先级

    “我们不是生产者,我只是大自然的搬运工.” 学习Android最好的途径当然是强大的官方文档了,其中在Processes and Threads一节中对于进程生命周期淘汰优先级,有着详细的介绍.原文如 ...

  6. ProxyCreationEnabled 和 LazyLoadingEnabled 的关系

    我们会使用这两个设置来决定是否加载导航属性.默认情况这两个值都是true的,也就是说会以延迟加载的方式加载导航属性,也就是当我们访问导航属性的时候才会去查数据库获取导航属性的数据.db.Configu ...

  7. HDU 5793 - A Boring Question

    HDU 5793 - A Boring Question题意: 计算 ( ∑(0≤K1,K2...Km≤n )∏(1≤j<m) C[Kj, Kj+1]  ) % 1000000007=? (C[ ...

  8. const的一些总结

    const的一些总结 采用const符号常量写出来的代码更容易维护,有些函数只读不写: 1 常变量: const 类型说明符 变量名 2 常引用: const 类型说明符 &变量名 3 常成员 ...

  9. 总结:整理 oracle异常错误处理 .

    5.1 异常处理概念 5.1.1 预定义的异常处理 5.1.2 非预定义的异常处理 5.1.3 用户自定义的异常处理 5.1.4  用户定义的异常处理 5.2 异常错误传播 5.2.1 在执行部分引发 ...

  10. Ajax XMLHttpRequest对象的三个属性以及open和send方法

    (1)onreadystatechange 属性onreadystatechange 属性存有处理服务器响应的函数.下面的代码定义一个空的函数,可同时对 onreadystatechange 属性进行 ...