首先声明本文档纯属原创,如果你喜欢的话请转载
自我感悟
首先介绍下第一印象,感觉MyLayout 很强大不用添加很多的约束就能实现完美实现布局 比如UIScrollView 自动会设置ContentSize,如果内容子视图的超出UIScrollView 的时候就会自动实现滑动,还有就是如果一个等间距 等宽或者登高布局子视图的布局很简单,少量代码就能完美实现。好了,废话少说,上代码
初级介绍
几个关键字
myMargin(就是子视图距父视图的间距,相当于一次设置了myLeftMargin myRightMargin myRightMargin myBottomMargin, 当然了如果这几个间距不相等就需要分开赋值了),
myWidth(本视图的宽度)
myHeight(本视图的高度)
1. 根据x,y ,width ,height ,将视图显示在固定位置(例如x = 20 , y = 200 , width = 200, height = 40)
你可能直接理解为(如下)
UILabel *label = [[UILabel alloc] init];
label.backgroundColor = [UIColor greenColor];
label.text = @"第一显示子视图请确定位置" ;
label.myLeftMargin = 20 ; // 设置左边距
label.myTopMargin = 200; ; //设置上边距
label.myHeight = 40 ; //设置高度
label.myWidth = 200; // 设置宽度
label.font = [UIFont systemFontOfSize:20];
label.textAlignment = NSTextAlignmentCenter ;
[self.view addSubview:label];
然后执行,你发现界面上什么都没有,你肯定要问为什么了,首先MyLinearLayout 是一种布局视图,只要是界面上显示的一个view,都要加上约束也就是添加MylinearLayout 约束,看上面代码你会发现self.view(理论上也就是一个UIView)没有添加约束,好了现在知道原因就可以更改了,
对self.view 添加约束
MyLinearLayout *layout = [MyLinearLayout linearLayoutWithOrientation:MyLayoutViewOrientation_Vert];
layout.myMargin = 0 ;
layout.backgroundColor = [UIColor whiteColor];
layout.wrapContentHeight = YES ; // 设置self.view 的高度是根据子视图高度 来显示也就是变长的
layout.wrapContentWidth = NO ; // 设置self.view 的宽度是定长,现在是self.view 的宽度和window 的宽度一致
[self.view addSubview:layout];
// 或者你也可以这样做
/*
MyLinearLayout *layout = [MyLinearLayout linearLayoutWithOrientation:MyLayoutViewOrientation_Vert];
layout.myMargin = 0 ;
layout.backgroundColor = [UIColor whiteColor];
layout.wrapContentHeight = YES ;
layout.wrapContentWidth = NO ;
self.view = layout ;
*/
上面label代码就可以修改为 (也就是修改最后一句代码为 )
[layout addSubview:label];
这样label就显示出来!显示出来你可能又要问,一般label 就是根据text 内容宽度来显示的,好的下面就介绍
根据UILabel 的text 的内容来显示(text有多宽就显示多宽,高度根据label的font来显示, 如下图所示)
label 中的设置myWidth 和myHeight 的代码去掉,添加 sizeToFit (设置label 宽度)和 flexedHeight = YES(设置label 高度),完整代码就是
UILabel *label = [[UILabel alloc] init];
label.backgroundColor = [UIColor greenColor];
label.text = @"第一显示子视图请确定位置" ;
label.myLeftMargin = 20 ;
label.myTopMargin = 200; ;
label.flexedHeight = YES ; // 确定label 的高度
label.font = [UIFont systemFontOfSize:10];
label.textAlignment = NSTextAlignmentCenter ;
[label sizeToFit]; // 根据内容长度来确定label 的宽度
[layout addSubview:label];
当然还是有人说,我想给一段text,固定label 的宽度,来变长显示,好的代码如下
根据UILabel 中text 的内容,多行显示label 代码如下
UILabel *label = [[UILabel alloc] init];
label.backgroundColor = [UIColor greenColor];
label.text = @"第一显示子视图请确定位置第一显示子视图请确定位置第一显示子视图请确定位置第一显示子视图请确定位置第一显示子视图请确定位置第一显示子视图请确定位置第一显示子视图请确定位置第一显示子视图请确定位置" ;
label.myLeftMargin = 20 ;
label.myRightMargin = 20 ;
label.myTopMargin = 200; ;
label.flexedHeight = YES ;
label.font = [UIFont systemFontOfSize:10];
label.textAlignment = NSTextAlignmentCenter ;
label.numberOfLines = 0;
[layout addSubview:label];
// 显示如下