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 ...
随机推荐
- [asp.net core]project.json(2)
摘要 上篇文章介绍了project.json中的一部分属性.属性真的比较多,所以分开了,考虑到其中的英文比较简单,也不再进行翻译了,从英文原文中,直接粘贴过来了. project.json(1) pr ...
- c语言strtod()函数的用法
函数原型: #include <stdlib.h> double strtod(const char *nptr, char **endptr); C语言及C++中的重要函数. 名称含义 ...
- strtol,strtoll,strtoul, strtoull字符串转化成数字
今天看kafka,有一个参数选项中有: 'S' seq=strtoull(optarg,NULL,10); do_seq=1; 之后查找了下 strtoull 函数的功能,了解如下: ---- ...
- chrome(谷歌浏览器)老是提示此文件可能损害计算机
chrome://settings/advanced设置-高级设置-“隐私设置”-取消选中“启用针对网上诱骗和恶意软件的防护功能”复选框试试,
- [译]ASP.NET 5: New configuration files and containers
原文:http://gunnarpeipman.com/2014/11/asp-net-5-new-configuration-files-and-containers/ ASP.NET vNext提 ...
- C# DateTime和String转换
"; DateTime.ParseExact(time,"yyyyMMdd",System.Globalization.DateTimeFormatInfo.Curren ...
- iPad 多任务 Spilt View & Size Class
iPad 多任务 Spilt View & Size Class 一.多任务简介 iOS 9 以后iPad新增了多任务的支持,主要形式有三种: Slide Over (侧边快捷打开) Spil ...
- git/gitLab
gitlab安装:http://www.360doc.com/content/15/0603/14/21631240_475362133.shtml http://www.cnblogs.com/wi ...
- 跨Controllers传数据
今天遇到两个问题,第一个是跨controller传值,后一个是比较简单的linq数据库查询问题.先描述以下问题我有一个入库单和一个入库明细,入库的逻辑是先填写入库单在填入库明细.两者要么同时完成,要么 ...
- Mac Mini中添加VNC访问
开启Mac Mini上面的VNC. 1) 打开“系统偏好设置”(System Preference),双击打开“共享”(Sharing)项. 2)在左侧将“屏幕共享”(Screen sharing) ...