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年 博文 ...
随机推荐
- hadoop自定义权限
#1.测试类想运行hadoop的测试类,我们必须先编译hadoop mac下编译hadoop-2.7.4 然后查看测试类 org.apache.hadoop.hdfs.server.namenode. ...
- 自制wifi信号放大器
自制wifi信号放大器 只要家里安装了一台无线路由器,在家里的任何地方都可以使用带上网功能的电子产品上网,但是由于距离的问题,WiFi信号有强弱之分,离无线路由器稍微远点,信号就有所降低,上网速度受影 ...
- HashMap实现原理及源码分析(jdk1.8)
HashMap底层由数组+链表+红黑树组成,可接受null值,非线程安全 1.基本属性 transient Node<K,V>[] table; //hashmap数组 static fi ...
- mrpt安装
1.mrpt2.0参 See PPA for mrpt 2.0 branch (for mrpt 1.5.* read here). sudo add-apt-repository ppa:josel ...
- Fabric和Sawtooth技术分析(上)
https://mp.weixin.qq.com/s?__biz=MjM5MDAxMTE0MA==&mid=2652049866&idx=1&sn=5b4aea961f3d64 ...
- jquery 获取被点击元素的id属性值
有时候可能需要获取被点击元素的一些信息,此处就以id属性为例子,进行演示一下. $(document).click(function (e){ var v_id=e.target.id; consol ...
- 【Codeforces Round #518 (Div. 2)】
A:https://www.cnblogs.com/myx12345/p/9847588.html B:https://www.cnblogs.com/myx12345/p/9847590.html ...
- [LeetCode] Maximum Product Subarray 连续数列最大积
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- hdu 1847 Good Luck in CET-4 Everybody! 组合游戏 找规律
题目链接 题意 有\(n\)张牌,两人依次摸牌,每次摸的张数只能是\(2\)的幂次,最后没牌可摸的人为负.问先手会赢还是会输? 思路 0 1 2 3 4 5 6 7 8 9 10 11 -- P N ...
- HDU5032 Always Cook Mushroom(树状数组&&离线)
树状数组+询问离线.一个优化是需要的,就是先对1000*1000个点先排序,而不是每次都生成这1000*1000个点然后和询问一起排序,那样会tle. #include <iostream> ...






