使用autolayout动态控制视图

在开发中,经常需要用到xib。
在xib中的视图做动态布局,视情况而对某些部分的视图进行隐藏或显示,大家是怎么处理的呢?

下面我用个小例子和大家讲一下我的看法与做法。

涉及到的知识点:

  1. scrollview在xib中的自动布局方式
  2. 约束优先级

scrollview布局

使用autolayout动态控制视图_第1张图片
Paste_Image.png

先放个scrollview,做距父视图上下左右的4个约束。

使用autolayout动态控制视图_第2张图片
Paste_Image.png

再在scrollview上放个容器视图,对容器视图做距父视图(scrollview)上下左右的四个约束,

然后再加上1个与父视图相等的约束来控制scrollview的宽度,让scrollview只能形成上下滑动。
(这个时候约束有错误提示,说缺少高度,无视就好,后面讲原理)

使用autolayout动态控制视图_第3张图片
Paste_Image.png

再往容器view上面加3个view。做约束。

使用autolayout动态控制视图_第4张图片
Paste_Image.png

记得最下面一个view要做与容器view的底部的约束,只有这样,它才能计算出你的scrollview 可以滚动的视图的高度是多少,这一点很重要。

到这里,一个用xib生成的scrollview已经搞定了。接下来我们来实现动态控制视图。

约束优先级

使用autolayout动态控制视图_第5张图片
Paste_Image.png

把第三个视图的距上约束拖成属性,控制它是否生效,记得要改成strong修饰(默认是weak),否则在调用方法后约束置空了,再找不到这个约束,也就没办法再把这个视图显示回来了。

再把最下面的v3做一个与最上面的v1的相对高度约束,再把相应的数值改成在v2隐藏之后,v3和v1之间的高度。这时候会报错误,你再把这个约束的优先级下调,只要比1000低就行。

使用autolayout动态控制视图_第6张图片
Paste_Image.png

小结:

  1. scrollview通过xib自动控制高度在于增加一个容器视图,通过对容器内的子视图做约束,让xib可以计算出整体的高度。
  2. 容器视图的约束距父视图上下左右的这四个约束是令它与scrollview一直保持相同大小,与scrollview的宽的约束是用来控制它的内容宽度大小,可以理解成contentsize的大小。如果你需要做一个横向的scrollview,就把它与父视图的高度做成相同的就行了,其它和这个一样。
  3. 个人觉得这个方法还是挺简洁的,在xib中用起来比较舒适,控制起来也比较简明。但需要对约束理解相对清晰。
  4. 约束的优先级,就是先满足谁,再满足谁。我这里用的就是在代码中令v3距上的约束失效之后,系统会自动采用这个优先级低的,因为这个时候之前的那个优先级高的约束已经失效了,无法满足,也就会去使用优先级低的了。

就到这里了,难免有不足之处,欢迎指出。
谢谢〜

你可能感兴趣的:(使用autolayout动态控制视图)