自动布局的发展

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. 《利用python进行数据分析》读书笔记--第六章 数据加载、存储与文件格式

    http://www.cnblogs.com/batteryhp/p/5021858.html 输入输出一般分为下面几类:读取文本文件和其他更高效的磁盘存储格式,加载数据库中的数据.利用Web API ...

  2. 原创一看便知、Maven创建web项目

    创建maven-项目    如果 pom.xml 文件报错 右击项目-->Maven-->update Project 详细步骤   上图中Next 2.继续Next 3.选maven-a ...

  3. JQ完成表格单元格顺序的上移下调

    如有指教及疑问,欢迎留言 HTML代码 <table class="exampletable"> <thead> <tr> <th> ...

  4. Java开发中经典的小实例-(冒泡法)

    public class Test25 {    public static void main(String[] args) {        // 冒泡法        int[] array = ...

  5. 两行代码搞定 JavaScript 的日期验证

    我们通常在 JavaScript 中验证日期,基本的思路大概是,先判断年月日是否有效,再判断当月是否有当日,比如一些月份没有 31 日,平年二月没有 29.30 日,闰年二月没有 30 日等等. 偶然 ...

  6. Java一个汉字占几个字节(详解与原理)

    1.先说重点: 不同的编码格式占字节数是不同的,UTF-8编码下一个中文所占字节也是不确定的,可能是2个.3个.4个字节: 2.以下是源码: @Test public void test1() thr ...

  7. lucene 搜索demo

    package com.ljq.utils; import java.io.File; import java.util.ArrayList; import java.util.List; impor ...

  8. Redis使用系列目录(一)

    环境介绍 Redis 安装 Redis配置文件详解 Redis主从复制搭建 Redis集群环境搭建 Redis高可用

  9. 【学习笔记】在原生javascript中使用ActiveX和插件

    什么是插件 现在的浏览器提供了大量的内置功能,但仍然有一些工作无法完成,如播放音频和视频.插件及其扩展浏览器功能就尤为重要. 插件是可下载的应用程序,可以插入到浏览器中,现在有很多不同的插件,常用的有 ...

  10. c++11 function bind 测试。

    实验小结 1)function 是一个模板类.有函数指针成员.可以看作安全型函数指针. template<typename _Res, typename... _ArgTypes> cla ...