我是iOS开发。布局界面时,我偏爱xib布局,原因是,如果控件多时,创建控件的代码会很多,在加上一些绑定事件,或实现一些代理,再加上masonry的布局,整体代码量会猛增,虽清晰,但总觉得不如用xib拖控件,减少创建的代码,用xib约束,减少masonry布局的代码块。

       如果不熟悉如何修改xib的约束的,我这里先举个小列。如果熟悉,就跳过此部分。

       对控件拖约束,此时约束是实线,选择在代码中需要修改的约束上连敲两下左键,弹出小框,框中有三条,依次是Constant,Priority,Multiplier.其中Priority的值为1000。表示必须的约束,不可修改。将值修改为750。发现实线约束,变成虚线了,表示不必要的约束,可以修改。在约束上右键,关联约束到对应的类中。即可根据需要修改此约束。例如:

self.playBtnHeightConstriant.constant = 36;

   self.playBtnHeightConstriant.priority = UILayoutPriorityDefaultHigh;//提升约束的优先级

       我在开发中用xib拖控件,加约束,然后修改约束的优先级,关联到相应类中,再通过改变约束值,做动画。现在我把动画分为两种类型来讲。

       一种类型是,通过不断改变约束值,实现动画。case 1,在scrollDidScroll方法中,根据scrollView.ContentOffset.y的值的改变,同步改变某个控件的约束。即可达到滑动UIScrollView或UITableView或UIWebView等对象时,某控件实现动画。case 2,A控件,B控件,C控件在垂直方向用约束相连,并修改A控件top约束的优先级,通过修改top约束的值,实现,A,B,C控件,垂直方向上一起移动。此类型的动画效果,较纯代码写控件用修改frame来做动画,更简单(通过修改一个,可以多个一起动画)且代码量少。

      第二种类型的动画是,约束值的修改,放到UIView动画中。经过多次尝试,得出,约束值的修改,是一瞬间完成的,无论是放置在UIView动画内外。故当自己用xib布局控件,想试用UIView动画修改约束,是达不到动画效果的。解决方案为,将控件的frame做相应的UIView动画。

     更新:

[父控件.view layoutIfNeeded];就可以了。

  如遇到错误的地方,请不吝指正。谢谢