ios 之 autoresizing小解
2016-04-07 11:13
357 查看
对于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:
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这样的写法来定义,代表了它可以复选。如果你不明白为什么,可以复习下“位运算”。那么这些值分别代表什么意思呢?其实如何理解这几个值很简单,那就是从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简单的一个属性,理解它之后可以让很多事情变得简单。<93cediv class="bdsharebuttonbox tracking-ad bdshare-button-style0-16" style="font-family:'microsoft yahei';float:right;">
相关文章推荐
- ios 之 autoresizing小解
- zz:ios完整学习路线
- ios github使用
- ios 清除缓存
- iOS项目之解析HTML数据
- IOS Masonry介绍与使用实践:快速上手Autolayout
- zz 【转载用于学习】IOS开发技巧--Git的使用
- iOS学习笔记--瀑布流封装
- iOS 隐藏backBarButtonItem
- webrtc ios 端编译错误
- Webrtc IOS下载编译文档
- iOS设计中对Xcode设置中创建PCH文件的过程
- [IOS 开发] automaticallyAdjustsScrollViewInsets属性
- iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件断点下载
- iOS 开发--开源图片处理圆角
- iOS开发扫描二维码
- 关于使用刷新控件的思考
- Xcode批量修改类名(一键修改包括所有的头文件自动改)
- 解析iOS崩溃日志
- iOS - 策略模式