首先声明本文档纯属原创,如果你喜欢的话请转载
自我感悟
首先介绍下第一印象,感觉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];
// 显示如下
G
M
T
檢測語言阿尔巴尼亚语阿拉伯语阿塞拜疆语爱尔兰语爱沙尼亚语巴斯克语白俄罗斯语保加利亚语冰岛语波兰语波斯尼亚语波斯语布尔语(南非荷兰语)丹麦语德语俄语法语菲律宾语芬兰语高棉语格鲁吉亚语古吉拉特语哈萨克语海地克里奥尔语韩语豪萨语荷兰语加利西亚语加泰罗尼亚语捷克语卡纳达语克罗地亚语拉丁语拉脱维亚语老挝语立陶宛语罗马尼亚语马尔加什语马耳他语马拉地语马拉雅拉姆语马来语马其顿语毛利语蒙古语孟加拉语缅甸语苗语南非祖鲁语尼泊尔语挪威语旁遮普语葡萄牙语齐切瓦语日语瑞典语塞尔维亚语塞索托语僧伽罗语世界语斯洛伐克语斯洛文尼亚语斯瓦希里语宿务语索马里语塔吉克语泰卢固语泰米尔语泰语土耳其语威尔士语乌尔都语乌克兰语乌兹别克语希伯来语希腊语西班牙语匈牙利语亚美尼亚语伊博语意大利语意第绪语印地语印尼巽他语印尼语印尼爪哇语英语约鲁巴语越南语中文简体中文繁体
阿尔巴尼亚语阿拉伯语阿塞拜疆语爱尔兰语爱沙尼亚语巴斯克语白俄罗斯语保加利亚语冰岛语波兰语波斯尼亚语波斯语布尔语(南非荷兰语)丹麦语德语俄语法语菲律宾语芬兰语高棉语格鲁吉亚语古吉拉特语哈萨克语海地克里奥尔语韩语豪萨语荷兰语加利西亚语加泰罗尼亚语捷克语卡纳达语克罗地亚语拉丁语拉脱维亚语老挝语立陶宛语罗马尼亚语马尔加什语马耳他语马拉地语马拉雅拉姆语马来语马其顿语毛利语蒙古语孟加拉语缅甸语苗语南非祖鲁语尼泊尔语挪威语旁遮普语葡萄牙语齐切瓦语日语瑞典语塞尔维亚语塞索托语僧伽罗语世界语斯洛伐克语斯洛文尼亚语斯瓦希里语宿务语索马里语塔吉克语泰卢固语泰米尔语泰语土耳其语威尔士语乌尔都语乌克兰语乌兹别克语希伯来语希腊语西班牙语匈牙利语亚美尼亚语伊博语意大利语意第绪语印地语印尼巽他语印尼语印尼爪哇语英语约鲁巴语越南语中文简体中文繁体
語言功能限100個字符