看到一篇讲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 按比例相对布局的更多相关文章

  1. 从此爱上iOS Autolayout

    转:从此爱上iOS Autolayout 这篇不是autolayout教程,只是autolayout动员文章和经验之谈,在本文第五节友情链接和推荐中,我将附上足够大家熟练使用autolayout的教程 ...

  2. iOS autoLayout总结

    本文转自 http://ruikq.github.io/ios/autolayout/uiscrollview/2015/01/27/iOS-autolayout%E6%80%BB%E7%BB%93. ...

  3. 【转】IOS AutoLayout详解(三)用代码实现(附Demo下载)

    转载自:blog.csdn.net/hello_hwc IOS SDK详解 前言: 在开发的过程中,有时候创建View没办法通过Storyboard来进行,又需要AutoLayout,这时候用代码创建 ...

  4. iOS 瀑布流之栅格布局

    代码地址如下:http://www.demodashi.com/demo/14760.html 一 .效果预览 二.确定需求 由下面的需求示意图可知模块的最小单位是正方形,边长是屏幕宽除去边距间隔后的 ...

  5. iOS — Autolayout之Masonry解读

    前言 1 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时 ...

  6. [转]从此爱上iOS Autolayout

    原文地址 这篇不是autolayout教程,只是autolayout动员文章和经验之谈,在本文第五节友情链接和推荐中,我将附上足够大家熟练使用autolayout的教程.这篇文章两个月前就想写下来,但 ...

  7. iOS AutoLayout自动布局&Masonry介绍与使用实践

    Masonry介绍与使用实践:快速上手Autolayout http://www.cnblogs.com/xiaofeixiang/p/5127825.html http://www.cocoachi ...

  8. iOS - AutoLayout

    前言 NS_CLASS_AVAILABLE_IOS(6_0) @interface NSLayoutConstraint : NSObject @available(iOS 6.0, *) publi ...

  9. IOS开发之UIScrollView约束布局

    概要 在iOS开发学习中,UIScrollView是绕不过去的一个重要控件. 但是相对于Android的ScrollView,iOS的这个滚动控件的用法简直是复杂一万倍... 最主要是目前能找到的大部 ...

随机推荐

  1. ajax 请求前后处理

    1. 介绍 通过 jQuery 提供的 ajaxSetup 方法,我们可以拦截页面上所有的 Ajax 请求响应(包括 $.ajax.$.post.$.get).这样我们可以对这些 Ajax 请求响应做 ...

  2. 前端深入之css篇|link和@import到底有什么区别?

    写在前面 在真正的前端开发中,我们很少去写行内样式和内嵌样式,通常都是去引用外部样式. 而在我们学习之初的外部样式表都是用link引入的,但是当后来我们学习的逐渐深入,发现@import也可以引入样式 ...

  3. Thinkphp5.0第四篇

    删除数据 当前模型删除 $user=UserModel::get(1); if($user->delete()){return '删除成功';} else{return '删除失败';} 根据主 ...

  4. Ubuntu server 安装及jdk+mysql安装教程

    Ubuntu server 安装教程 1.查找及下载Ubuntu镜像文件 可以在以下页面下载想要的版本,我这里选择19.04 server版的iso镜像文件: http://mirrors.163.c ...

  5. c++第一个程序“Hello world!”

    c++第一个程序“Hello world!” 打开编译器(这里以vs2013为例) 单击新建项目 选择Win32 控制台应用程序 点击右下角确定 点击完成  点击解决方案管理器  新建cpp文件  右 ...

  6. java不支持多继承

    java不支持多继承,但支持多重继承,即一个类只能继承一个类,使用extends关键字 一个类可以实现多个接口,接口之间用逗号分隔,使用implements关键字 一个接口可以继承多个其他接口,接口之 ...

  7. node与mysql的相互使用————node+mysql

    node与mysql的相互使用----node+mysql 为什么选node???因为我是个前端. 为什么选mysql???因为成熟,稳定,听说容易学. 一.mysql数据库: mysql下载和使用我 ...

  8. kafka-0.10.2.1:Producer生产时无法自动创建Topic

    集群环境: CenterOS 1台 Kafka:0.10.2.1版本. 今天在测试环境下,我们的Kafka集群工作不正常,具体现象为,使用confulentkafka向kafka集群生产消息失败,且并 ...

  9. HashMap底层数据结构详解

    一.HashMap底层数据结构 JDK1.7及之前:数组+链表 JDK1.8:数组+链表+红黑树 关于HashMap基本的大家都知道,但是为什么数组的长度必须是2的指数次幂,为什么HashMap的加载 ...

  10. 【JZOJ5263】分手是祝愿

    Description 请注意本题的数据范围. Input Output Sample Input 2 2 15 19 3 30 40 20 Sample Output 285 2600 Hint 数 ...