iOS AutoLayout 百分比布局

 

iOS AutoLayout 百分比布局 

 


本文记录如何在 UIStoryboard 或者 xib 中进行百分比布局,包括html

  • 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 实现的,下面来一一查看其实现。ios

View.Width 占其 Superview.Width 的百分比

该功能实现很简单,以一个居中的按钮 Button 为例,首先将按钮相对于父容器添加 Equal Width 的 constraint,而后将它的 multiplier 设成 0.2,这样就可实现 Button1 的宽度为父容器宽度的 0.2 倍。操做步骤以下:布局

View宽度占父视图宽度百分比

View.Leading 与 Superview.Leading 间距占 Superview.Width 的百分比

该功能实现实际上是使 View.Leading 相对于 Superview.Trailing 布局,而后再调整 multiplier 参数实现,以下操做步骤实现了将 Button 的左边距离父视图左边界的距离站父视图宽度的0.2倍,以下:spa

View.Leading与Superview.Leading间距占Superview.Width的百分比

View.Trailing 与 Superview.Trailing 间距占 Superview.Width 的百分比

该需求实现是使 View.Trailing 相对于 Superview.Trailing 布局,而后再调整 multiplier 参数,须要注意的是使用 Reverse First And Second Item调整以下表达式中 item1 和 item2 在等式中两边的位置。.net

item1.attribute1 = multiplier × item2.attribute2 + constant设计

如下步骤实现 Button 的 Trailing 距离父视图右边距为父视图宽度的0.2倍,须要注意的是,此时的 multiplier 是 (1-0.2=0.8),在修改 Button 约束值时,能够从顶部导航中看到约束表达式的变化:code

View.Trailing 与 Superview.Trailing 间距占 Superview.Width 的百分比

View.Leading 与 Superview.CenterX 间距占父视图 Superview.Width 的百分比

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

View.Leading 与 Superview.CenterX 间距占父视图 Superview.Width 的百分比

限定View的宽高比

有时候咱们须要保持视图的宽高比不变进行缩放,此时能够设定其 Aspect Ratio 保持其在进行缩放时宽高比固定。blog

以 Superview.Width 宽度的某一百分比为 View 之间的间隔

要实现这个需求就没有以前那么简单了,这须要添加一个间距视图,设置每一个视图与相邻间距视图的边缘间距约束,而后给全部的间距视图添加相对于其父视图的等宽约束,设置合适的比例便可。这里借用 为iPhone 6设计自适应布局 文中一图:ip

以 Superview.Width 宽度的某一百分比为 View 之间的间隔