ios Autolayout 按比例相对布局
看到一篇讲ios storyboard 按比例相对布局的博客,挺不错的转下来了!
可到liumh.com查看。
本文记录如何在 UIStoryboard 或者 xib 中进行百分比布局,包括
- View.Width 占其 Superview.Width 的百分比
- View.Leading 与 Superview.Leading 间距占 Superview.Width 的百分比
- View.Trailing 与 Superview.Trailing 间距占 Superview.Width 的百分比
- View.Leading 与 Superview.CenterX 间距占父视图 Superview.Width 的百分比
- 限定View的宽高比
- 以 Superview.Width 宽度的某一百分比为 View 之间的间隔
在 iOS NSLayoutConstraint priority 一文中提到过 multiplier, 上述提到的百分比布局都是基于
multiplier 实现的,下面来一一查看其实现。
View.Width 占其 Superview.Width 的百分比
该功能实现很简单,以一个居中的按钮 Button 为例,首先将按钮相对于父容器添加 Equal Width 的 constraint,然后将它的 multiplier 设成 0.2,这样就可实现 Button1 的宽度为父容器宽度的 0.2 倍。操作步骤如下:

View.Leading 与 Superview.Leading 间距占 Superview.Width 的百分比
该功能实现其实是使 View.Leading 相对于 Superview.Trailing 布局,然后再调整 multiplier 参数实现,如下操作步骤实现了将 Button 的左边距离父视图左边界的距离站父视图宽度的0.2倍,如下:

View.Trailing 与 Superview.Trailing 间距占 Superview.Width 的百分比
该需求实现是使 View.Trailing 相对于 Superview.Trailing 布局,然后再调整 multiplier 参数,需要注意的是使用 Reverse First And Second Item 调整如下表达式中 item1 和 item2 在等式中两边的位置。
item1.attribute1 = multiplier × item2.attribute2 + constant
以下步骤实现 Button 的 Trailing 距离父视图右边距为父视图宽度的0.2倍,需要注意的是,此时的 multiplier 是 (1-0.2=0.8),在修改 Button 约束值时,可以从顶部导航中看到约束表达式的变化:

View.Leading 与 Superview.CenterX 间距占父视图 Superview.Width 的百分比
有时间需要将 UI 组件相对于父视图的中线进行布局,比如将 View.Leading 与父视图中线的距离设定为父视图宽度20%, 即相对于父视图 CenterX 的 multiplier 值为 1.4

限定View的宽高比
有时候我们需要保持视图的宽高比不变进行缩放,此时可以设定其 Aspect Ratio 保持其在进行缩放时宽高比固定。
以 Superview.Width 宽度的某一百分比为 View 之间的间隔
要实现这个需求就没有之前那么简单了,这需要添加一个间距视图,设置每个视图与相邻间距视图的边缘间距约束,然后给所有的间距视图添加相对于其父视图的等宽约束,设置合适的比例即可。这里借用 为iPhone 6设计自适应布局 文中一图:

关于文中所涉及到的方法,可在 AutoLayoutMultiplier 工程中查看。
ios Autolayout 按比例相对布局的更多相关文章
- 从此爱上iOS Autolayout
转:从此爱上iOS Autolayout 这篇不是autolayout教程,只是autolayout动员文章和经验之谈,在本文第五节友情链接和推荐中,我将附上足够大家熟练使用autolayout的教程 ...
- iOS autoLayout总结
本文转自 http://ruikq.github.io/ios/autolayout/uiscrollview/2015/01/27/iOS-autolayout%E6%80%BB%E7%BB%93. ...
- 【转】IOS AutoLayout详解(三)用代码实现(附Demo下载)
转载自:blog.csdn.net/hello_hwc IOS SDK详解 前言: 在开发的过程中,有时候创建View没办法通过Storyboard来进行,又需要AutoLayout,这时候用代码创建 ...
- iOS 瀑布流之栅格布局
代码地址如下:http://www.demodashi.com/demo/14760.html 一 .效果预览 二.确定需求 由下面的需求示意图可知模块的最小单位是正方形,边长是屏幕宽除去边距间隔后的 ...
- iOS — Autolayout之Masonry解读
前言 1 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时 ...
- [转]从此爱上iOS Autolayout
原文地址 这篇不是autolayout教程,只是autolayout动员文章和经验之谈,在本文第五节友情链接和推荐中,我将附上足够大家熟练使用autolayout的教程.这篇文章两个月前就想写下来,但 ...
- iOS AutoLayout自动布局&Masonry介绍与使用实践
Masonry介绍与使用实践:快速上手Autolayout http://www.cnblogs.com/xiaofeixiang/p/5127825.html http://www.cocoachi ...
- iOS - AutoLayout
前言 NS_CLASS_AVAILABLE_IOS(6_0) @interface NSLayoutConstraint : NSObject @available(iOS 6.0, *) publi ...
- IOS开发之UIScrollView约束布局
概要 在iOS开发学习中,UIScrollView是绕不过去的一个重要控件. 但是相对于Android的ScrollView,iOS的这个滚动控件的用法简直是复杂一万倍... 最主要是目前能找到的大部 ...
随机推荐
- java实现有道翻译爬虫
我的博文地址 https://www.cnblogs.com/lingdurebing/p/11618902.html 使用的库 1.commons-codec 主要是为了加密,可以直接用java原生 ...
- php常用函数(第一版)
1.array_slice 作用:数组分页函数 案例:$output = array_slice ( $input , - 2 , 1 ); 2.array_column 作用:数组根据值取出一 ...
- js中对于数组的操作
let myArray=[11,22,33]; console.log('原数组:',myArray); myArray.push(44,55); console.log('用push在数组后面插入元 ...
- ELK 学习笔记之 elasticsearch elasticsearch.yml配置概述
elasticsearch.yml配置概述: 设置集群名字 cluster.name 定义节点名称 node.name 节点作为master,但是不负责存储数据,只是协调. node.master: ...
- Mysql数据类型TINYINT(1)与BOOLEAN踩坑记
熟悉Mysql的同学应该都知道,Mysql查询的boolean结果将输出为0或者1. 比如: ; 其输出结果为1. 查阅mysql官方文档仅找到如下描述: 11.10 Using Data Types ...
- Linux入门(历史与现状)
Linux 入门之 历史与现状 Linux是一个计算机的操作系统,与windows类似,是一款系统软件.操作系统首先是一个计算机程序,使用计算机语言开发,比如C语言.VC语言.是计算机硬件和应用软 ...
- Qt+VC2010+glew环境安装配置
Qt的源码及预编译安装包在 Qt Archive下载,http://download.qt.io/archive/qt/, 目前最新的是Qt5,其中和Qt4不同的是,Qt5多了个QOpenGLWidg ...
- NoUniqueBeanDefinitionException常见异常!!
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of ...
- 你真的了解Web前端开发吗?未来前端远比你想的有前途!
近几年来,随着 HTML5.JS 的流行,前端这个职业火热了起来!不少人发出疑惑,前端以后还会更有前途吗? 我只能告诉你:前端不灭 现在都明白了用户体验至上,还要用着舒服 后端提供床,前端提供颜值高的 ...
- vue —— 监听
vue的监听用途很大 比如:通过数据的值的变化,执行某个方法 首先:data中要有个变量初始值 finalTotalAmount的初始值是0 我们想当finalTotalAmount值发生变化时,执行 ...