Masonry 比例(multipliedBy)

Posted 西贝了爷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Masonry 比例(multipliedBy)相关的知识,希望对你有一定的参考价值。

前言

说到ios自动布局,有很多的解决办法。有的人使用xib/storyboard自动布局,也有人使用frame来适配。对于前者,笔者并不喜欢,也不支持。对于后者,更是麻烦,到处计算高度、宽度等,千万大量代码的冗余,对维护和开发的效率都很低。

笔者在这里介绍纯代码自动布局的第三方库:Masonry。这个库使用率相当高,在全世界都有大量的开发者在使用,其star数量也是相当高的。

效果图

本节详解Masonry的以动画的形式更新约束的基本用法,先看看效果图:

技术分享

我们这里初始按钮是一个很小的按钮,点击就不断放大,最大就放大到全屏幕。

核心代码

看下代码:

讲解

移除之前的所有约束,然后添加新约束的方法是:mas_remakeConstraints

我们的目标是点击时,将里面的往外面,外面的往里面,并且显示动画效果。其中,最关键的代码是:

提示:使用multipliedBy必须是对同一个控件本身,比如,上面的代码中,我们都是对bottomInnerView.mas_width本身的,如果修改成相对于其它控件,会出问题。

我们就说说bottomInnerView的约束如何添加。 我们希望width/height比为1/3.0,首先,我们设置了其topbottom与父视图一致且始终在父视图中居中显示:

然后我们通过make.width.height.lessThanOrEqualTo设置了宽、高的最大值与父视图相同,然后设置了宽和高与父视图相等,但是优先级为最低,以保证子视图的宽高不超过父视图。

最后,我们设置了bottomInnerView的高为宽的3倍。

以上是关于Masonry 比例(multipliedBy)的主要内容,如果未能解决你的问题,请参考以下文章

Masonry_设置比例

如何在 snapkit 中更改 offset() 和 multipliedBy() 的优先级

Java堆内存中为什么有两个survival区及为什么与年轻代比例是1:1:8?

如何设置JVM内存分配比例

JVM垃圾回收--年轻代年老点和持久代

基础复习