ios 中的autoresizingMask
以前对这个知识理解的不太对,看了下面这个地址的文章后,感觉说的对,也没检验,今天实验后,发现是错的。。。在这里对以前读过此文的朋友表示抱歉。
原文地址如下:
http://www.cnblogs.com/jiangyazhou/archive/2012/06/26/2563041.html
他这里说的理论是错误的,我下面写出自己的理解,虽然有点地方也不严谨,但是大体正确。
在 UIView 中有一个autoresizingMask的属性,它对应的是一个枚举的值(如下)
enum { UIViewAutoresizingNone = 0, UIViewAutoresizingFlexibleLeftMargin = 1 << 0, UIViewAutoresizingFlexibleWidth = 1 << 1, UIViewAutoresizingFlexibleRightMargin = 1 << 2, UIViewAutoresizingFlexibleTopMargin = 1 << 3, UIViewAutoresizingFlexibleHeight = 1 << 4, UIViewAutoresizingFlexibleBottomMargin = 1 << 5};UIViewAutoresizingNone就是不自动调整。
UIViewAutoresizingFlexibleLeftMargin ,如果不使用,左侧margin不会改变,也就是左顶点的x坐标不会变化。如果使用,左侧margin会变化,具体变化值在不同情况下会有所不同(成比例放大?系统会自行按一定算法调整吧。)。
UIViewAutoresizingFlexibleRightMargin ,原理同上
UIViewAutoresizingFlexibleTopMargin 原理同上
UIViewAutoresizingFlexibleBottomMargin 原理同上
UIViewAutoresizingFlexibleWidth 自动调整自己的宽度,如果不使用,宽度不会变化,如果使用,宽度跟父view等比缩放。
UIViewAutoresizingFlexibleHeight 原理同上
另外虽然这里的变量个数和 xib中的设置相仿,但是xib的设置并不和这里的变量一一对应。
比如下图,autoresizingMask 是 42,就是 101010,就是没有使用UIViewAutoresizingFlexibleLeftMargin,UIViewAutoresizingFlexibleRightMargin 和UIViewAutoresizingFlexibleHeight 其他的都用了。

再看一个例子,如下图:

打印出的 view 的 autoresizingMask 属性值是 46,也就是 二进制的 101110,其实,仅仅是没有使用UIViewAutoresizingFlexibleLeftMargin,UIViewAutoresizingFlexibleHeight!剩下的都用了。
再看一个

这个,属性值是45,101101,就是缺少UIViewAutoresizingFlexibleHeight和UIViewAutoresizingFlexibleWidth。
再看一个:

属性值是18 ,010010,就是只有 UIViewAutoresizingFlexibleHeight和UIViewAutoresizingFlexibleWidth。
这个也是让我困扰很久的问题!所以不要根据xib中的设定,想当然地写出错误的代码约束!
看完上面这些例子,我们可以总结一下,如果你希望view的长宽需要等比放大,就需要使用UIViewAutoresizingFlexibleHeight 和UIViewAutoresizingFlexibleWidth,而如果需要把某个方向的margin固定,就不要加入对应的方向的FlexibleMargin mask ,而不需要固定的方向,就要加入对应的mask。
另外,需要注意,再xib中的某些设定是冲突的,系统会自动去掉冲突的设置,比如,下面这种情况:

同时限定左右距离不变,而且长度不变,这是不可能达到的要求。系统会无视右边距离不变的约束。
ios 中的autoresizingMask的更多相关文章
- iOS中支付宝集成
iOS中支付宝集成 如今各种的App中都使用了三方支付的功能,现在将我在使用支付宝支付集成过程的心得分享一下,希望对大家都能有所帮助 要集成一个支付宝支付过程的环境,大致需要: 1>公司:先与支 ...
- iOS中数据库应用基础
iOS 数据库入门 一.数据库简介 1.什么是数据库? 数据库(Database) 是按照数据结构来组织,存储和管理数据的仓库 数据库可以分为2大种类 关系型数据库(主流) PC端 Oracle My ...
- 正则表达式在iOS中的运用
1.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...
- iOS 中的 HotFix 方案总结详解
相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dynamic Framework(Ap ...
- iOS中使用正则
一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...
- IOS中div contenteditable=true无法输入
在IOS中<div contenteditable="true"></div>中点击时可以弹出键盘但是无法输入.加一个样式-webkit-user-sele ...
- 谈谈iOS中的屏幕方向
众所周知,iOS中提供了[UIDevice currentDevice].orientation与[UIApplication sharedApplication].statusBarOrientat ...
- iOS中assign、copy 、retain等关键字的含义
iOS中assign.copy .retain等关键字的含义 转自:http://my.oschina.net/majiage/blog/267409 assign: 简单赋值,不更改索引计数cop ...
- Quartz 2D在ios中的使用简述二:创建画布
在iOS中使用Quartz画图时,第一步就是要获取画布(图形上下文),然后再画布上做各种操作.先看下CoreGraphics.h这个头文件,就可以知道能够创建多少种上下文类型. #include &l ...
随机推荐
- Cool Sites
尽快学习完成这个网页 https://www.sitepoint.com/php-security-cross-site-scripting-attacks-xss/ https://msdn.mic ...
- ApacheServer-----关于443端口被占用的解决方法
最经公司项目需要经过Apache服务器转发,自己也下载了ApacheServer,但是在启动的过程中,遇到443端口被占用,网上看了一些解决方法,都不对,没有解决问题. 执行启动命令httpd -k ...
- HTML5 之Canvas绘制太阳系
<!DOCTYPE html> <html> <head> <title>HTML5_Canvas_SolarSystem</title> ...
- OC第七节——内存管理
戏言: iOS开发已经到了一个ARC时代,一般不需要我们过多的去关注内存是怎么分配,怎么管理的.很长一段时间,我也不知道内存管理是什么鬼,但如果遇到这方面的问题,却找不到解决办法确实很头疼的.So,还 ...
- Alice and Bob 要用到辗转相减
Alice and BobTime Limit: 1 Sec Memory Limit: 64 MBSubmit: 255 Solved: 43 Description Alice is a be ...
- 打开Excel的报错,提示:不能使用对象链接和嵌入
计算机这几天在打开Excel文档的时候,提示:不能使用对象链接和嵌入, 而且出现如下的提示:Microsoft Office Excel进程已停止工作, 每次打开Excel的时候都是同样的问题,害我跟 ...
- maven之respository(仓库)本地路径修改
maven默认的仓库路径会在c盘(我的C:\Users\Administrator\.m2\repository),这样如果系统出问题或其他原因会造成仓库损坏,因此会自己配置仓库路径. 1.首先找到你 ...
- http之错误码
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes 响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行.响应码分五种类型 ...
- DP~数塔(hrbustoj1004)
aaarticlea/bmp;base64,iVBORw0KGgoAAAANSUhEUgAAAtQAAAPgCAYAAAASsev/AAAgAElEQVR4nOzdf4w0x33n9/4rQP4L8s
- ACdream1063——平衡树
1.题目大意:让你设计一种数据结构,支持插入一个数,和在这个结构里查询结构中的哪个数和给定的数的异或值最小 2.分析:这个怎么做呢,就是trie树,我们建立一个trie树,把树按01进制存进去,然后在 ...