SDAutoLayout方法的学习
学了这么久了,发现只是单纯的看,照抄硬搬,虽然也可以学到不少知识,也可以解决很多的问题,但是当面试的时候遇到面试官问我对于第三方框架内部的认识,我只能无奈的说,我不知道,只是简单的用,而且就用的方法都有什么我都不知道,好多时候都是直接网上一搜,代码拷贝过来,问题OK,用完了就忘了。
今天才觉得学知识不是简单的会抄就行了,得真的学到自己手里,才不会出现会解决问题,但是不知道怎么解决这样的尴尬情况。SDAutoLayout可以说是一个非常简单的代码适配的第三方,就这样简单易用的我依然是会一点点,被面试官虐了之后,我想我该认真对待每一个我们接触的非常好用的第三方框架,写我们写不出来,但是至少我们要做的是有什么方法,能做什么事,都得烂熟于胸,让未来不再有尴尬。方法的实现不必关心,也只是把.h里面的文件方法的声明再好好研读一番
看了一下,SD适配就是包含了两个分类,一个是UIView+SDAutoLayout,另一个是UITableView+SDAutoTableViewCellHeight
UIView+SDAutoLayout:
首先方法的调用:
view.sd_layout.leftSpaceToView(self.view, 20).topSpaceToView(self.view,80).heightIs(130).widthRatioToView(self.view, _widthRatio);
view参照父视图self.view进行约束,那么约束前view必须添加到self.view上才能执行上述代码。
注:
方法名中带有“SpaceToView”的需要传递2个参数:(UIView)参照view 和 (CGFloat)间距数值
方法名中带有“RatioToView”的需要传递2个参数:(UIView)参照view 和 (CGFloat)倍数
方法名中带有“EqualToView”的需要传递1个参数:(UIView)参照view
方法名中带有“Is”的需要传递1个参数:(CGFloat)数值
控制器内部修改约束:
view.sd_layout.widthRatioToView(self.view, _widthRatio); //在方法内部更新View要修改的约束条件
[view updateLayout]; // 调用此方法更新约束
注:
如果是父子关系视图,且更新有动画效果的话,更新父视图约束时,子视图也同样得调用updateLayout方法;
label的自适应方法:
testLabel.sd_layout.leftSpaceToView(self.view1, 10).rightSpaceToView(self.view1, 10).topSpaceToView(self.view1, 10).autoHeightRatio(0);
// autoHeightRatio 设置文本内容自适应,如果这里的参数为大于0的数值则会以此数值作为view的高宽比设置view的高度
如果要设置label内部内容的行高
NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:8];
NSAttributedString *string = [[NSAttributedString alloc] initWithString:text attributes:@{NSForegroundColorAttributeName : color, NSParagraphStyleAttributeName: paragraphStyle}];
UILabel *label = [UILabel new];
[self.view addSubview:label];
label.attributedText = string;
label.sd_layout.leftSpaceToView(self.view, 10).rightSpaceToView(self.view, 10).topSpaceToView(self.view4, 10).autoHeightRatio(0);
// 标注lable的text为attributedString
label.isAttributedContent = YES;
view根据内部控件自适应方法:
view.sd_layout.leftSpaceToView(self.view0, 10).topEqualToView(self.view0).rightSpaceToView(self.view, 30);
// view使用高度根据子view内容自适应,所以不需要设置高度,而是在后面调用下面方法
[view setupAutoHeightWithBottomView:testView bottomMargin:10]; //实现高度根据最底部的子View自适应,第二个参数为距离最底部view底边缘的距离
控制器内部控件等宽方法:
self.view.sd_equalWidthSubviews = @[self.view0, self.view1, self.view2]; //调用这个方法,就将控制器宽度等分给了3个子view;
当view的宽度或高度确定,且view是正方形时,设置另一个长度可以
view.heightEqualToWidth(); // 高度等于自身宽度()中可以不填任何参数
UITableView+SDAutoTableViewCellHeight
cell的高度自适应
SD中cell的高度自适应分两步
1、在cell创建内部控件后,所有子控件布局约束完成后,调用方法
[self setupAutoHeightWithBottomView:_view4 bottomMargin:10];
2、在tableView的heightForRow方法中,调用返回方法
return [self.tableView cellHeightForIndexPath:indexPath model:str keyPath:@"text" cellClass:[TestCell2 class] contentViewWidth:[self cellContentViewWith]];
//其中model 为模型实例, keyPath 为 model 的属性名 通过 kvc 统一赋值接口

浙公网安备 33010602011771号