自动布局的发展

1.frame:通过代码计算 frame

iPhone3GS \ iPhone4 \ iPhone4S 屏幕的物理尺寸是一样的(无需屏幕适配), 而且一个当时的应用要么是横屏要么是竖屏, 不存在能同时进行横竖屏切换的应用

2.autoresizing :

autoresizing是UIView的属性,一直存在,使用也比较简单,但是没有autolayout那样强大。如果你的界面比较简单,要求的细节没有那么高,那么你完全可以使用autoresizing去进行自动布局

随着iPad 的发布, 屏幕物理大小发生了变化, 并且要求部分应用程序实现横竖屏切换,所以不能把控件的 frame 都写死了,需要进行屏幕适配。

Autoresizing的核心思想就是:参照父容器来设置子控件的 frame。不再写死 frame, 而是参照

举例: 在竖屏下有一个按钮要占据整个屏幕宽度, 当切换到横屏下以后同样要占据整个屏幕的宽度

3.Auto Layout:

  • Auto Layout是一种“自动布局”技术,专门用来布局UI界面的
  • Auto Layout自iOS 6开始引入,由于Xcode 4.5的不给力,当时并没有得到很大推广
  • 自iOS 7(Xcode 5)开始,Auto Layout的开发效率得到很大的提升
  • 苹果官方也推荐开发者尽量使用Auto Layout来布局UI界面
  • Auto Layout能很轻松地解决屏幕适配的问题

iOS有两大自动布局利器:autoresizing 和 autolayout(autolayout是IOS6以后新增)

随着 iPhone5 \ iPhone5s 等的发布苹果设备不同尺寸的屏幕变得越来越多, 不仅要求能根据控件父子关系来设置相对位置, 也要求能根据”任意”控件之间的关系来设置位置

因为 Autoresizing只能设置当前控件与父控件之间的相对关系, 当遇到要设置兄弟控件之间的关系的时候 Autoresizing就无能为力了

举例: 在竖屏下, 屏幕底部有两个按钮, 这两个按钮的间距为一个固定的值(宽度不指定);

当切换为横屏的时候要求这两个按钮还显示在屏幕底部, 并且按钮间的间距不变, 按钮可以随之变宽。

使用AutoLayout 

4.Size Classes :

在iOS8中,新增了Size Classes特性

看时间作为补充, 今天的主要内容是"Auto Layout”

当 iPhone6发布以后, 苹果设备的屏幕越来越多(以后也可能出现更多不同大小的屏幕), 为了能更容易的适配不同的屏幕, 苹果推出了Size Classes 技术

通过 AutoLayout设置的约束, 约束一旦添加就会应用于各种屏幕(也就是说在各种不同的屏幕下都使用相同的约束)

通过 Size Classes + Auto Layout的方式, 可以为不同尺寸的屏幕设置不同的约束

  • 举例: 在3.5 inch的屏幕下希望某个按钮紧贴屏幕上边显示, 但是当屏幕变成5.5 inch以后, 则希望该按钮显示到屏幕的正中央
  • Size Classes技术主要解决的问题: 为不同尺寸的屏幕通过 Auto Layout设置不同的约束。
  • 使用注意
  • 注意: 无论是通过 Autoresizing 还是 Auto Layout其实只是间接设置了控件的 frame, 所以一旦使用了 Autoreszing 或者 Auto Layout之后,就不要在直接设置 frame了, 否者可能产生混乱”冲突”。
  • 苹果强烈建议使用Auto Layout,所以在创建新的项目时已经默认帮我们选择使用Auto Layout ,由于Autoresizing 和Auto Layout二者是互斥的,同时只能使用其中一种,要想使用Autoresizing的时候必须先禁用Auto Layout

iOS---自动布局的更多相关文章

  1. iOS 自动布局详细介绍

    1. 自动布局的理解 iOS自动布局很有用,可以在不同size的屏幕上运行,原先看的头痛,还是习惯用最蠢的[UIScreen mainScreen].bounds.size.width等来布局,后来实 ...

  2. iOS自动布局——Masonry详解

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂新鲜事儿发表于云+社区专栏 作者:oceanlong | 腾讯 移动客户端开发工程师 前言 UI布局是整个前端体系里不可或缺的一环 ...

  3. 掌握iOS自动布局

    1,自动布局是一种基于约束的布局(constraint-based layout)引擎,它可以根据开发者在对象上的约束自动调整大小与位置. 2.在iOS 6之前使用的布局模型是“spring& ...

  4. IOS自动布局

    参考资料 https://developer.apple.com/library/mac/documentation/UserExperience/Conceptual/AutolayoutPG/Vi ...

  5. iOS自动布局之autoresizingi

    对于iOS的app开发者来说,不会像Android开发者一样为很多的屏幕尺寸来做界面适配,因此硬编码的坐标也能工作良好,但是从设计模式上来说这不是好的做法.而且也还有一些问题,如iPhone5的适配, ...

  6. 学会爱上iOS自动布局(Auto Layout) - 剑尖

    本文翻译自Yari Dareglia的LEARN TO LOVE AUTO LAYOUT文章先生们,女士们,让我们以正确的心态开始本教程吧:自动布局就是简单!我花了一段时间来掌握自动布局是如何工作的, ...

  7. iOS 自动布局过程

    自动布局将视图显示在屏幕上的步骤: 更新约束,它会从子视图传递到父视图,设置布局信息:约束更新时自动触发setNeedsUpdateConstraints:updateConstraints可以增加本 ...

  8. iOS 自动布局框架 – Masonry 详解

    目前iOS开发中大多数页面都已经开始使用Interface Builder的方式进行UI开发了,但是在一些变化比较复杂的页面,还是需要通过代码来进行UI开发的.而且有很多比较老的项目,本身就还在采用纯 ...

  9. iOS自动布局框架-Masonry详解

    首先,在正式使用Masonry之前,我们先来看看在xib中我们是如何使用AutoLayout     从图中我们可以看出,只要设置相应得局限,控制好父视图与子视图之间的关系就应该很ok的拖出你需要的需 ...

  10. IOS 自动布局-UIStackPanel和UIGridPanel(四)

    为什么说scrollview的自动化布局是难点? 对scrollview做自动化布局,无非就是想对scrollview里面的subviews来做自动化布局.但是scrollview里面的subview ...

随机推荐

  1. $().each 和表单事件的坑

    在用each循环时 1.想结束循环 return false 2.想跳过某循环 return 3.想跳出function 不行,请切换成其他循环如 for 使用form表单事件 1.必须要有submi ...

  2. Material Design学习

    前言: 最为一个用习惯了bootstrap的前端小菜,今天偶然听闻material design 这个从未听闻的前端框架,带着好奇开始了新的尝试,并将bootstrap跟material design ...

  3. springMVC下集成active MQ发送邮件

    环境:本地需安装activemq,且访问正常,安装方法网上很多,这里省略. 1.添加相关jar包,我这里使用的是maven,你也可以选择其他方式添加.下面是maven相关配置: <!-- Act ...

  4. sdn

    #!/usr/bin/env python #from mininet.cli import CLI #from mininet.link import Link #from mininet.net ...

  5. 瘋子C语言笔记(结构体/共用体/枚举篇)

    (一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name ...

  6. [LeetCode_2] Add Two Numbers

    LeetCode: 2. Add Two Numbers /** * Definition for singly-linked list. * struct ListNode { * int val; ...

  7. js 操作数组封装

    function OperateArray(array) { this.array = array; } OperateArray.prototype.hasValue = function(val) ...

  8. usr类库的使用(一般用在第三方类库使用系统库报错头文件找不到时)

    第三方Html解析类库Hpple,在导入框架libxml2.2.dylib后,XCode仍然找不到<libxml/tree.h>. 1 .项目 -Targets 中的 Build P ha ...

  9. dom4j的quickstart

    我所理解的dom4j就是用来解析XML文档的,XML文档的重要性不言而喻,用过框架的人谁不知道呢,是不是.但是实际上需要我们自己来解析XML文档的应用场景感觉不是很多,毕竟该解析的XML都已经被框架很 ...

  10. 手势(UIGestureRecognizer)

    通过继承 UIGestureRecognizer 类,实现自定义手势(手势识别器类). PS:自定义手势时,需要 #import <UIKit/UIGestureRecognizerSubcla ...