MyLinearLayout 之 初級學習經驗
首先宣告本文件純屬原創,如果你喜歡的話請轉載
自我感悟
首先介紹下第一印象,感覺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個字元