这把的干货较少,就算是一个简单记录吧,正好原文也是偏理论方向。做为autoLayout的话我理解就是约束,这个东西在xib和storyBoard上面能够看的特别明显,哪里缺约束导致什么后果都能看到。我就是因为维护了好几个storyBoard的项目,所以一想到约束脑袋里就有了模型。
不过我是不怎么喜欢用storyBoard的,在代码里想写autoLayout简单点一种是用官方的VFL语言,另一种就是masonry了,我本人超级喜欢masonry,基本上项目全部用它。
masonry的用法网上有很多这里就不在赘述了,但是有一种用法好像网上说的不多。就是tableViewCell自适应高度时,只要把里面约束写好,外面不写设置高度的方法,那么自适应的效果就非常好!我觉得比那种先计算文字高度的方法好,而且写法也简单。
在学习戴老师的这篇文章中,有以下两个点值得去记一下,第一个是masonry写的东西如何做线性动画。
[aniView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.bottom.left.right.equalTo(self.view).offset(10);
}];
[aniView mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view).offset(30);
}];
[UIView animateWithDuration:3 animations:^{
[self.view layoutIfNeeded];
}];
原理就是autolayout在某个时刻也是会变成纯Frame计算的,所以我们用layoutIfNeeded可以做线性动画。 另一个就是这两个属性Content Hugging Priority(抗拉伸优先级)和Content Compression Resistance Priority(抗压缩优先级),这两个属性在写自适应的时候也非常有用,但是我之前都是用Masonry给高度写死,使用结果也差不多
还有就是有时候我们不能写高度的方法,但是如果其中有两个tableView,高度方法必须写的话,那我们就可以这么写
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if(indexPath.section==0){
return 100;//固定高度
}else{
return UITableViewAutomaticDimension;//动态高度
}
}
嗯,就我们公司的项目,会这个基本UI都能搞定