ios 之 autoresizing小解
来源:互联网 发布:淘宝规蜜pc端入口 编辑:程序博客网 时间:2024/05/21 09:05
对于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]; 控件相对于父视图坐标值不变
以上这些都较易理解, 但是autoresizing
还有一些组合场景。那就是组合使用的场景。
上面并未列举所有组合场景,但是已经足够我们理解 autoresizing
了。
2. 小结
Autoreszing的最常见的实用场景就是iPhone5的兼容了。比如我们想要设置tableView的frame,那我们只需要在初始化设置frame之后将tableView的autoresizingMask设置为UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight
就行了。
另一种比如我们想要一个view一直停留在其superview的最下方,那么我们在初始化设置frame之后只需要将autoresizingMask设置为UIViewAutoresizingFlexibleTopMargin
就可以了。
autorezingMask简单的一个属性,理解它之后可以让很多事情变得简单。
- ios 之 autoresizing小解
- ios 之 autoresizing小解
- ios 之 autoresizing小解
- ios 之 autoresizing小解
- iOS开发之autoreSizing
- IOS自动布局之Autoresizing
- IOS自动布局之Autoresizing
- IOS自动布局之Autoresizing
- IOS自动布局之Autoresizing
- iOS自动布局之Autoresizing
- IOS自动布局之Autoresizing
- IOS自动布局之Autoresizing
- iOS自动布局之Autoresizing
- IOS自动布局之Autoresizing
- IOS自动布局之Autoresizing
- 详解iOS之AutoResizing、AutoLayout、sizeClass来龙去脉
- iOS的屏幕适配之Autoresizing、Autolayout、VFL、Masonry
- 一篇文章详解iOS之AutoResizing、AutoLayout、sizeClass来龙去脉
- 浅谈PHP单引号和双引号的区别
- enum class type 和enum type 的区别
- CSS引用方式
- IOS开发心得汇总
- C#+vs2013+windows10配置emgu技巧
- ios 之 autoresizing小解
- Smobiler实现类似朋友圈功能—MicroBlog控件(开发日志十七)
- 在CollectionView添加头部视图
- 如何进行shell脚本正确性测试
- socket编程——一个简单的例子
- OpenCV Haar AdaBoost源码改进(比EMCV快6倍)
- RabbitMQ消息队列(五):Routing 消息路由
- 5.1.2 SMTPD_CMD结构体:smtp协议命令表示
- sectionheadView 跟随UItabview滚动 去掉UItableview headerview黏性