以前对这个知识理解的不太对,看了下面这个地址的文章后,感觉说的对,也没检验,今天实验后,发现是错的。。。在这里对以前读过此文的朋友表示抱歉。

原文地址如下:

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的更多相关文章

  1. iOS中支付宝集成

    iOS中支付宝集成 如今各种的App中都使用了三方支付的功能,现在将我在使用支付宝支付集成过程的心得分享一下,希望对大家都能有所帮助 要集成一个支付宝支付过程的环境,大致需要: 1>公司:先与支 ...

  2. iOS中数据库应用基础

    iOS 数据库入门 一.数据库简介 1.什么是数据库? 数据库(Database) 是按照数据结构来组织,存储和管理数据的仓库 数据库可以分为2大种类 关系型数据库(主流) PC端 Oracle My ...

  3. 正则表达式在iOS中的运用

    1.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...

  4. iOS 中的 HotFix 方案总结详解

    相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dynamic Framework(Ap ...

  5. iOS中使用正则

    一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...

  6. IOS中div contenteditable=true无法输入

    在IOS中<div contenteditable="true"></div>中点击时可以弹出键盘但是无法输入.加一个样式-webkit-user-sele ...

  7. 谈谈iOS中的屏幕方向

    众所周知,iOS中提供了[UIDevice currentDevice].orientation与[UIApplication sharedApplication].statusBarOrientat ...

  8. iOS中assign、copy 、retain等关键字的含义

    iOS中assign.copy .retain等关键字的含义  转自:http://my.oschina.net/majiage/blog/267409 assign: 简单赋值,不更改索引计数cop ...

  9. Quartz 2D在ios中的使用简述二:创建画布

    在iOS中使用Quartz画图时,第一步就是要获取画布(图形上下文),然后再画布上做各种操作.先看下CoreGraphics.h这个头文件,就可以知道能够创建多少种上下文类型. #include &l ...

随机推荐

  1. .ssh/config简单使用

    转自:http://blog.lizhigang.net/archives/265 .ssh/config简单使用 需求:  工作的电脑经常会存储不同的key,并且使用不同的用户登录linux系统.如 ...

  2. [译]ES6箭头函数和它的作用域

    原文来自我的前端博客: http://www.hacke2.cn/arrow-functions-and-their-scope/ 在ES6很多很棒的新特性中, 箭头函数 (或者大箭头函数)就是其中值 ...

  3. 懒加载的用处和赋nil操作[iOS开发教程]

    懒加载的用处和赋nil操作 1:数据,清空操作: self.array = nil; 2:归档从新从本地获取数据 self.archive = nil; ##id = nil的用处 block当参数, ...

  4. Hadoop 之Impala

    impala 是基于hive的大数据实时分析查询引擎,直接使用Hive的元数据库metadata意味着impala元数据都存储在hive的metadstore中并且impala兼容hive的 sql解 ...

  5. Linux 开机启动方式设置 inittab 详解,开机直接进入“命令行”模式

    Linux下的 /etc/inittab 中的英文解释: This file describes how the INIT process should set up  the system in a ...

  6. 正确理解JavaScript中的this关键字

    JavaScript有this关键字,this跟JavaScript的执行上下文密切相关,很多前端开发工程师至今对this关键字还是模棱两可,本文将结合代码讲解下JavaScript的this关键字. ...

  7. Lab1--关于安装JUnit的简要描述

    安装JUnit的过程描述: 下载两个jar包: hamcrest-all-1.3.jar junit-4.12.jar 注意在导入完成jar包之后不要随意改变jar包的路径. 创建java程序,书写如 ...

  8. ios 第三方登录

    ios 第三方登录通常的做法是, 1.登录后,获得第三方的uid,调用服务器登录接口,如服务器返回无此用户,转2,有此用户,转3. 2.服务器返回无此用户,需完善用户资料,如果完成,则在服务器创建与第 ...

  9. W3Cschool菜鸟教程离线版下载链接

    请在电脑上打开以下链接进行下载w3cschool 离线版(chm):http://pan.baidu.com/s/1bniwRCV(最新,2014年10月21日更新)w3cschool 离线版(htm ...

  10. C#网络爬虫 WebUtility使用 转义字符 urlCode

    背景: 在C#写网络爬虫时候,有时候需要将html中的转义字符进行处理,还有网址中的中文处理 一.html转义字符处理 1.ASP.NET中的html解析 HttpUtility.HtmlDecode ...