iOS学习笔记——AutoLayout的约束
iOS学习笔记——AutoLayout约束
之前在开发iOS app时一直以为苹果的布局是绝对布局,在IB中拖拉控件运行或者直接使用代码去调整控件都会发上一些不尽人意的结果,后来发现iOS在引入了AutoLayout的同时也引入了约束。约束的存在使得iOS的AutoLayout相当于Android中的相对布局。
一个控件在父容器中的渲染出来,有两方面的要素,一个是大小(Size),另一个是位置(Location)。其实每个空间的初始化方法都会那么一个initWithFrame,Frame就包含了这两要素。在约束中,主要也是分了这两大类。在IB中右下角可以添加约束,也可以看到有哪些约束
本人参照于Android中的相对布局来了解这些布局。
iOS中关于位置的约束也比较多,从上图的图标也可以看出有"XXX Edges"是与其他控件对齐顶端、左端等的约束;"Horizontal Centers"那三个是与其他控件中心对齐的约束;"XXX Center in Container"是对于父容器中心对齐的约束;还有另外一个界面中没有图标也没有文字描述的"XXX Space To",其作用是相对其他控件(有可能是同级的控件,也有可能是父容器)的补白,与Margin效果一样。
关于Size大小的约束显然有普通的宽高约束Width和Height;与其他控件同高同宽的Equal Widths/Heights 也有宽高成比例的约束Aspect Ratio。
在每个约束中其实也包含了一个线性变换的关系,
y=kx+b
这个一次函数的通用表达式在初一时已经开始接触,实际上在每个约束里面都包含着这样的一个关系。
双击左图这个界面中的任意一个约束则会跳转到右图界面中
界面中First Item是一次函数中的因变量y,Second Item是一次函数中的自变量x,Contrant是截距b,Multiplier是斜率k。Relation是两者的关系,一般默认是相等(Equal),可以选择其他关系(<=、>=)。因此当我们想让某个控件占了半个屏幕的高度,可以添加Equal Height的约束,同时把Mulitplier值设成0.5。
了解完这些约束的作用后,在实践的时候也走了少的弯路。
添加约束时除了可以用上述两个界面去添加外,其实像 "XXX Edges" 和"Equal XXX"这样的要与其他控件参与的约束可以通过在IB中按着"Ctrl"键拉线的形式与其他关联上。假如在IB界面设计部分难以选中某个视图,那可以在左端的控件树中进行,能达到相同的效果
在添加约束之前个人认为在IB中把控件的位置和大小先设置好,然后在添加之后效果会直观便捷,不需要反复去调整约束的值。
参考文章
http://www.devtalking.com/articles/adaptive-layout-for-iphone6-1/
iOS学习笔记——AutoLayout的约束的更多相关文章
- iOS学习笔记-地图MapKit入门
代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...
- iOS学习笔记16-数据库SQLite
一.数据库 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等.离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式: 归档:NSKeyedArchiver 偏好设置:NSU ...
- IOS学习笔记25—HTTP操作之ASIHTTPRequest
IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...
- IOS学习笔记之关键词@dynamic
IOS学习笔记之关键词@dynamic @dynamic这个关键词,通常是用不到的. 它与@synthesize的区别在于: 使用@synthesize编译器会确实的产生getter和setter方法 ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记10-UIView动画
上次学习了iOS学习笔记09-核心动画CoreAnimation,这次继续学习动画,上次使用的CoreAnimation很多人感觉使用起来很繁琐,有没有更加方便的动画效果实现呢?答案是有的,那就是UI ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- iOS学习笔记之Category
iOS学习笔记之Category 写在前面 Category是类别(也称为类目或范畴),使用Category,程序员可以为任何已有的类添加方法.使用类别可以对框架提供的类(无法获取源码,不能直接修改) ...
- iOS学习笔记之ARC内存管理
iOS学习笔记之ARC内存管理 写在前面 ARC(Automatic Reference Counting),自动引用计数,是iOS中采用的一种内存管理方式. 指针变量与对象所有权 指针变量暗含了对其 ...
随机推荐
- linux查看发行版本
redhat系 cat /etc/redhat-release 其他 lsb_release -a
- 【性能为王】从PHP源码剖析array_keys和array_unique
之前在[译]更快的方式实现PHP数组去重这篇文章里讨论了使用array_flip后再调用array_keys函数替换直接调用array_unique函数实现数组去重性能较好.由于原文没有给出源码分析和 ...
- ASP.NET Core 1.0中的管道-中间件模式
ASP.NET Core 1.0借鉴了Katana项目的管道设计(Pipeline).日志记录.用户认证.MVC等模块都以中间件(Middleware)的方式注册在管道中.显而易见这样的设计非常松耦合 ...
- 企业IT管理员IE11升级指南【2】—— Internet Explorer 11 对Adobe Flash的支持
企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...
- GUI - GEB UI库
最近基于Winform开发了几款产品,感觉Winform有很大的局限性,其最主要的一点在于:控件是基于Windows窗体的,这就导致每个控件都是重量级控件,对复杂的界面来说,其性能和表现力都欠佳.在实 ...
- Azure SQL Database (19) Stretch Database 概览
<Windows Azure Platform 系列文章目录> Azure SQL Database (19) Stretch Database 概览 Azure SQL Da ...
- Java针对数据库增删改查代码
package com.bank.abc; import java.beans.PropertyVetoException; import java.sql.Connection; import ja ...
- C语言-结构体struct-联合体union-枚举enum
结构体 在Java中,我们要表示一个复合的数据类型就会使用对象去封装.而C就有结构体. 结构体是C语言中自定义的数据类型,是一组变量的集合,有别于数组,数组仅限于同一种数据类型,而结构体可以是任何数据 ...
- Java 对象引用方式 —— 强引用、软引用、弱引用和虚引用
Java中负责内存回收的是JVM.通过JVM回收内存,我们不需要像使用C语音开发那样操心内存的使用,但是正因为不用操心内存的时候,也会导致在内存回收方面存在不够灵活的问题.为了解决内存操作不灵活的问题 ...
- SQLServer比较两条数据是否相同
SQLServer比较两条数据是否相同 直接比较可能会一个一个字段的比较,也可以将多个字段拼成一个串然后比较,这里有个hash值比较的方法,很好用 用法 将需要的比较的column放进去,逗号隔开,只 ...