对于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简单的一个属性。理解它之后能够让非常多事情变得简单。

转载于:https://www.cnblogs.com/yfceshi/p/7240928.html

ios 之 autoresizing小解相关推荐

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

    1 // 2 // ViewController.m 3 // IOS_0115_buzhi 4 // 5 // Created by ma c on 16/1/15. 6 // Copyright ...

  2. ios老版本通过autoresizing简单适配iphone5

    今天打开已经上线的APP源码,发现Xcode检测出几个错误,简单修改一下就ok了. 有一个类库值得说一下:libxml2.2.7.3.dylib 这个库文件已经没有了,我们需要在项目的build Ph ...

  3. autolayout autoresizing

    WWDC 2012 Session笔记--202, 228, 232 AutoLayout(自动布局)入门 这是博主的WWDC2012笔记系列中的一篇,完整的笔记列表可以参看这里.如果您是首次来到本站 ...

  4. iOS - iOS 适配

    前言 什么是适配: 适应.兼容各种不同的情况. iOS 开发中,适配的常见种类: 1)系统适配, 针对不同版本的操作系统进行适配. 2)屏幕适配,针对不同大小的屏幕尺寸进行适配. iPhone 的尺寸 ...

  5. iOS布局-autoresizingMask

    iOS布局-AutoresizingMask 前端的主要任务简单来看,就是绘制界面,绑定数据.在iOS绘制界面的布局方式主要有以下三种: frame autoresizingMask AutoLayo ...

  6. ios开发之UIView和UIViewController

    UIView 表示屏幕上的一块矩形区域,负责渲染区域的内容,并且响应该区域内发生的触摸事件.它在 iOS App 中占有绝对重要的地位,因为 iOS 中几乎所有可视化控件都是 UIView 的子类. ...

  7. iOS开发:iPhone6、6 plus适配

    本文转载至 http://jingyan.baidu.com/article/8cdccae97a5c2b315413cda9.html 1 2 3 4 5 6 7 分步阅读 随着苹果公司持续推出新产 ...

  8. 如何让一套代码适配所有iOS设备尺寸?

    简介:随着移动互联网设备和技术的发展,各种移动设备屏幕尺寸层出不穷,折叠屏.分屏.悬浮窗等等,面对越来越多样的屏幕,如果为每种尺寸单独进行适配,不仅费时费力,还会增加端侧代码的开发与维护压力.如何让一 ...

  9. iOS中AutoLayer自动布局流程及相关方法

    关于UIView的Layer,IOS提供了三个方法: 1.layoutSubviews 系统重写布局:在iOS5.1和之前的版本,此方法的缺省实现不会做任何事情(实现为空),iOS5.1之后(iOS6 ...

最新文章

  1. 比ewsa更快的跑包工具_重庆单肩包订购,编织布袋定做厂家
  2. Mac OS X 常用快捷键一览
  3. UVa11809 - Floating-Point Numbers
  4. 文本分类实战技巧(tricks)汇总
  5. python pyd_python解析.pyd文件
  6. putty连接TPYBord V202开发板教程
  7. webpack 了解
  8. 下拉选择框 其他_WPS表格下拉菜单的多种做法(一)
  9. 安装历史版本nvidia显卡驱动
  10. 如何开通微信小程序在线客服系统?
  11. Android 自定义锁屏_开发自定义ROM提速:红米Note 6 Pro等Android Pie内核源代码上线...
  12. win10怎么隐藏桌面计算机,Win10隐藏秘技大公开
  13. Unity实现瞄准镜效果
  14. 【老王读Spring AOP-3】Spring AOP 执行 Pointcut 对应的 Advice 的过程
  15. 集成测试和单元测试覆盖率合并
  16. Vue怎么操作父元素、兄弟元素、子元素
  17. R语言检验独立性:卡方检验(Chi-square test)和费舍尔精确检验分析案例报告
  18. matlab中linspace的用法,matlab中的一些基本使用方法(持续添加)
  19. UE4 跑酷游戏-得分机制
  20. 防洪决策指挥系统(Axure高保真原型)

热门文章

  1. java 安卓界面 可视化_Monkey可视化工具开发(android篇)
  2. 用iframe transform: scale() 缩小后点不到按钮_“打分”或者“打多少分”用英文可以怎样去表达?...
  3. 五天学习MySQL 数据库教程(一)1.2SQL介绍
  4. 传热学环肋肋效率matlab程序,传热学 第二章第四节 通过肋片的导热.pdf
  5. php unset 多可以什么_php unset()销毁单个或多个变量
  6. python lua 性能比较 内存_Lua 的速度为什么比 Python 快?
  7. 软件测试师具备的素质_软件测试工程师有哪些需要具备的能力呢
  8. php oracle 源码_PHP3中使用ORACLE函数的使用说明
  9. laravel increment出现了翻倍递增_中国股市:如何判断“强庄股”的出现,看懂主力心甘情愿送钱上门...
  10. c语言中赋予从2开始的偶数,2013年计算机二级C语言上机试题三十二及答案