对于IOS的app开发人员来说,不会像Android开发人员一样为非常多的屏幕尺寸来做界面适配,因此硬编码的坐标也能工作良好,可是从设计模式上来说这不是好的做法。

并且也另一些问题,如iPhone5的适配,横竖屏的切换等。也许你能够做两套UI方案来做适配,可是这样添加反复工作量。并且不够高端,万一有出新的屏幕大小了呢。哲理就将介绍IOS中的两大自己主动布局利器:Autoresizing 和 Autolayout

autoresizing是UIView的属性。一直都有,使用简单,可是没有autolayout强大。autolayout是IOS6以后的新技术,更加强大。本文主要介绍Autoresizing的特性和使用方法。

1. Autoresizing特性

UIViewautoresizesSubviewsYES时。(默认是YES),
那么在当中的子view会依据它自身的autoresizingMask属性来自己主动适应其与superView之间的位置和大小。

autoresizingMask是一个枚举类型, 默认是UIViewAutoresizingNone,
也就是不会autoresize:


typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
UIViewAutoresizingFlexibleWidth = 1 << 1,
UIViewAutoresizingFlexibleRightMargin = 1 << 2,
UIViewAutoresizingFlexibleTopMargin = 1 << 3,
UIViewAutoresizingFlexibleHeight = 1 << 4,
UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};

这个枚举类型,使用了 1 << n 这种写法来定义。代表了它能够复选。假设你不明确为什么。能够复习下“位运算”。
那么这些值分别代表什么意思呢?

事实上怎样理解这几个值非常easy,那就是从xib里面看。 我们在一个xib文件里,取消勾选autolayout,(默认使用autolayout时。autoresizing看不到)。那么我们能够在布局那一栏看到怎样设置autoresizing.

上图说明了在xib中设置的这些线条和实际属性相应的关系。这当中须要注意的是,当中4个margin虚线才代表设置了该值,而width和height是实线代表设置了该值,不能想当然的理解。

这些项分别代表:

autoresizingMask是子视图的左、右、上、下边距以及宽度和高度相对于父视图按比例变化。比如:

UIViewAutoresizingNone 不自己主动调整。

UIViewAutoresizingFlexibleLeftMargin 自己主动按比例调整与superView左边的距离,且与superView右边的距离不变。

UIViewAutoresizingFlexibleRightMargin 自己主动按比例调整与superView的右边距离,且与superView左边的距离不变。

UIViewAutoresizingFlexibleTopMargin  自己主动按比例调整与superView的顶部距离,且与superView底部的距离不变。

UIViewAutoresizingFlexibleBottomMargin 自己主动按比例调整与superView的底部距离,且与superView顶部的距离不变。

UIViewAutoresizingFlexibleWidth 自己主动按比例调整宽度。

UIViewAutoresizingFlexibleHeight 自己主动按比例调整高度。

UILabel*    label = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 40)];

[label setAutoresizingMask: UIViewAutoresizingNone];  控件相对于父视图坐标值不变

CGRectMake(50, 100, 200, 40)
UIViewAutoresizingFlexibleWidth:控件的宽度随着父视图的宽度按比例改变    比如
label宽度为 100     屏幕的宽度为320          当屏幕宽度为480时      label宽度  变为  100*480/320

以上这些都较易理解, 可是autoresizing另一些组合场景。那就是组合使用的场景。

autoresizingMask 说明 xib预览效果
None view的frame不会随superview的改变而改变(右图的xib中预览效果与实际效果有差,实际效果是view的上边距不变)
TopMargin | BottomMargin view与其superView的上边距和下边距的比例维持不变
LeftMargin | RightMargin view与其superView的左边距和右边距的比例维持不变(右图的xib中预览效果与实际效果有差,实际效果是view的上边距不变)
LeftMargin | RightMargin | TopMargin | BottomMargin view与其superView的上下左右边距的比例维持不变
LeftMargin | Width view与其superView的右边距的比例维持不变, 左边距和width按比例调整(右图的xib中预览效果与实际效果有差。实际效果是view的上边距不变)
LeftMargin | Width | RightMargin 左边距、右边距、宽按比例调整。(右图的xib中预览效果与实际效果有差。实际效果是view的上边距不变)垂直方向是相同效果。故不列举
Width | Height 自己主动调整view的宽和高,保证上下左右边距不变。如把tableView设置为此属性,那么不管viewController的view是多大,都能自己主动铺满

上面并未列举全部组合场景,可是已经足够我们理解 autoresizing 了。

2. 小结

Autoreszing的最常见的有用场景就是iPhone5的兼容了。

比方我们想要设置tableView的frame,那我们仅仅须要在初始化设置frame之后将tableView的autoresizingMask设置为UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight 即可了。

还有一种比方我们想要一个view一直停留在其superview的最下方,那么我们在初始化设置frame之后仅仅须要将autoresizingMask设置为UIViewAutoresizingFlexibleTopMargin 就能够了。

autorezingMask简单的一个属性。理解它之后能够让非常多事情变得简单。

ios 之 autoresizing小解的更多相关文章

  1. 一篇文章详解iOS之AutoResizing、AutoLayout、sizeClass来龙去脉

    前言 iPhone自诞生以来,随着其屏幕尺寸不断的多样化,屏幕适配的技术一直在发展更新.目前,iOS系统版本已经更新到9.3,XCode的最新版本已经是7.3,仅iPhone历史产品的尺寸就已经有4种 ...

  2. iOS,自动布局autoresizing和auto layout,VFL语言

    1.使用autoresizing 2.使用autolayout 3.VFL语言(Visual Format Language:可视化格式语言) 使用autoresizing 点击xib文件,去掉使用a ...

  3. iOS 屏幕适配:autoResizing autoLayout和sizeClass

    1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...

  4. iOS开发——屏幕适配篇&autoResizing autoLayout和sizeClass

    autoResizing autoLayout和sizeClass,VFL,Masonry详解 1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前 ...

  5. 转:iOS 屏幕适配,autoResizing autoLayout和sizeClass图文详解

    1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...

  6. iOS 屏幕适配,autoResizing autoLayout和sizeClass图文详解

    === 1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS ...

  7. iOS Autoresizing Autolayout Size classes

    Autoresizing:出现最早,仅仅能够针对父控件做约束(注意:要关闭Autolayout&Size classes才能够看到Autoresizing) 代码对应: UIView.h中的a ...

  8. iOS autoresizing布局

    在对UIView以及其子类空间的布局方案有多种,今天温习了一下autoresizing布局 一.了解一下相关知识: 1.UIView其中一个属性为 @property(nonatomic) UIVie ...

  9. iOS UI-自动布局(Autoresizing)

    // // ViewController.m // IOS_0115_buzhi // // Created by ma c on 16/1/15. // Copyright (c) 2016年 博文 ...

随机推荐

  1. nyoj 325

    zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么 ...

  2. js深度复制

    项目过程遇到需要对一个对象处理,然后独立出来用,结果怎么处理都会影响到原有变量,原来是引用导致,只有深度复制才行. 最终用下面的赋值方法才搞成功 var result=$.extend( true, ...

  3. ansible中playbook使用

    palybook使用 ####yaml语法ansible中使用的yaml基础元素:变量Inventory条件测试迭代 playbook的组成结构InventoryModulesAd Hoc Comma ...

  4. BZOJ 2752:[HAOI2012]高速公路(road)(线段树)

    [HAOI2012]高速公路(road) Description Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站.Y ...

  5. HDU 4614 Vases and Flowers(线段树+二分)

    Vases and Flowers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others ...

  6. vue2+nodejs+mongodb搭建移动端网站

    从零开始一步步搭建移动端网站,持续更新,github代码如下,因为放了视频文件,下载可能有点慢 https://github.com/lanleilin/myHomepage 前端采用Vue2+vue ...

  7. BZOJ【1625】宝石手镯

    1625: [Usaco2007 Dec]宝石手镯 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1007  Solved: 684[Submit][St ...

  8. echarts源码中关于 判断平台的有用代码

    function detect(ua) { var os = {}; var browser = {}; // var webkit = ua.match(/Web[kK]it[\/]{0,1}([\ ...

  9. JavaScript内部是这样运行

    编译阶段 词法分析(Lexing) 这个过程会将由字符组成的字符串分解成(对编程语言来说)有意义的代码块,这些代 码块被称为词法单元(token). 简单举个例子:c = b - a 转换为 NAME ...

  10. EL与OGNL

    EL表达式:  >>单纯在jsp页面中出现,是在四个作用域中取值,page,request,session,application. >>如果在struts环境中,它除了有在上 ...