ios 之 autoresizing小解
对于IOS的app开发人员来说,不会像Android开发人员一样为非常多的屏幕尺寸来做界面适配,因此硬编码的坐标也能工作良好,可是从设计模式上来说这不是好的做法。
并且也另一些问题,如iPhone5的适配,横竖屏的切换等。也许你能够做两套UI方案来做适配,可是这样添加反复工作量。并且不够高端,万一有出新的屏幕大小了呢。哲理就将介绍IOS中的两大自己主动布局利器:Autoresizing 和 Autolayout。
autoresizing是UIView的属性。一直都有,使用简单,可是没有autolayout强大。autolayout是IOS6以后的新技术,更加强大。本文主要介绍Autoresizing的特性和使用方法。
1. Autoresizing特性
当UIView的autoresizesSubviews是YES时。(默认是YES),
那么在当中的子view会依据它自身的autoresizingMask属性来自己主动适应其与superView之间的位置和大小。
autoresizingMask是一个枚举类型, 默认是UIViewAutoresizingNone,
也就是不会autoresize:
|
|
|
这个枚举类型,使用了 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]; 控件相对于父视图坐标值不变
以上这些都较易理解, 可是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小解的更多相关文章
- 一篇文章详解iOS之AutoResizing、AutoLayout、sizeClass来龙去脉
前言 iPhone自诞生以来,随着其屏幕尺寸不断的多样化,屏幕适配的技术一直在发展更新.目前,iOS系统版本已经更新到9.3,XCode的最新版本已经是7.3,仅iPhone历史产品的尺寸就已经有4种 ...
- iOS,自动布局autoresizing和auto layout,VFL语言
1.使用autoresizing 2.使用autolayout 3.VFL语言(Visual Format Language:可视化格式语言) 使用autoresizing 点击xib文件,去掉使用a ...
- iOS 屏幕适配:autoResizing autoLayout和sizeClass
1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...
- iOS开发——屏幕适配篇&autoResizing autoLayout和sizeClass
autoResizing autoLayout和sizeClass,VFL,Masonry详解 1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前 ...
- 转:iOS 屏幕适配,autoResizing autoLayout和sizeClass图文详解
1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...
- iOS 屏幕适配,autoResizing autoLayout和sizeClass图文详解
=== 1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS ...
- iOS Autoresizing Autolayout Size classes
Autoresizing:出现最早,仅仅能够针对父控件做约束(注意:要关闭Autolayout&Size classes才能够看到Autoresizing) 代码对应: UIView.h中的a ...
- iOS autoresizing布局
在对UIView以及其子类空间的布局方案有多种,今天温习了一下autoresizing布局 一.了解一下相关知识: 1.UIView其中一个属性为 @property(nonatomic) UIVie ...
- iOS UI-自动布局(Autoresizing)
// // ViewController.m // IOS_0115_buzhi // // Created by ma c on 16/1/15. // Copyright (c) 2016年 博文 ...
随机推荐
- php获取客户端mac地址
exec('/sbin/arp -a 2>&1', $array, $return_val);dump($array);$mac = '';foreach($array as $valu ...
- linux系统mysql连接检查脚本
为了便于检查ECS服务器内部搭建的mysql或者RDS的mysql数据库,编写了一个mysql测试脚本,对于不熟悉命令行操作的朋友出现问题时可以检测一下. 脚本下载地址: http://j ...
- 【bzoj2096】[Poi2010]Pilots 双指针法+STL-set
题目描述 Tz又耍畸形了!!他要当飞行员,他拿到了一个飞行员测试难度序列,他设定了一个难度差的最大值,在序列中他想找到一个最长的子串,任意两个难度差不会超过他设定的最大值.耍畸形一个人是不行的,于是他 ...
- POJ 3683 Priest John's Busiest Day(2-SAT+方案输出)
Priest John's Busiest Day Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10010 Accep ...
- [HNOI2007][bzoj1187] 神奇游乐园 [插头dp]
题面: 传送门 给定一个四联通棋盘图,每个格子有权值,求一条总权值最大的回路 思路: 插头dp基础教程 棋盘? 回路? n,m<=10? 当然是插头dp啦~\(≧▽≦)/~ 然后发现这道题并不是 ...
- BZOJ2395 [Balkan 2011]Timeismoney 【最小乘积生成树】
题目链接 BZOJ2395 题意:无向图中每条边有两种权值,定义一个生成树的权值为两种权值各自的和的积 求权值最小的生成树 题解 如果我们将一个生成树的权值看做坐标,那么每一个生成树就对应一个二维平面 ...
- 四则运算出题系统,java
程序设计思想: 首先通过判断选择计算的范围,然后用随机数生成两个随机数,定义另一个数,将两个随机数计算得到的值赋给定义的数 程序代码: package Kaos1; import java.util. ...
- shell的简单介绍
一 什么叫shell,shell 是什么 如果考虑到操作系统其实是一组软件,我们可以发现应用程序其实是在最外层,就如同鸡蛋的外壳一样,因此这个也就被称为shell. 其实shell的功能只是提供用户操 ...
- POJ1671 Rhyme Schemes
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1776 Accepted: 984 Special Judge De ...
- Javascript&Html-history对象
Javascript&Html-history对象 history对象保存着用户的上网记录,这些记录从用户打开浏览器开始. 用户借助history对象实现的跳转. history.go(-1) ...






