亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

AutoLayout的三種設置方式之——NSLayoutConstraint代碼篇

2019-11-14 19:30:38
字體:
來源:轉載
供稿:網友

AutoLayout是從IOS 6開始蘋果引入來取代autoresizing的新的布局技術,該技術有三種設置方式,等下我來為大家一一敘述一下。

在說三種設置方式前,我們先簡單的說一下autolayout能夠設置哪些行為。

1.視圖的大?。匆晥D的絕對大小)。

2.視圖的位置(視圖相對于父視圖或者兄弟視圖的位置)。

3.視圖的對齊方式(相對于父視圖或者相對于兄弟視圖)。

  可以看到autolayout相比autoresizing技術來說要靈活的多,該技術有很多布局的約束設置。這次主要講的用代碼來設置AutoLayout,代碼向我們需要添加autoLayout視圖使用該方法

+(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;

該方法實際上就是滿足一個數學關系

item1 =(>=,<=) multiplier * item2 + constant。

參數說明:

view1:第一個視圖即item1。

attr1:是第一個視圖選擇的屬性

relation:即中間的關系(= , >= , <=)

view2:第二個視圖即item2。

attr2:是第二個視圖選擇的屬性

c:就是常熟constant。

  舉個簡單的例子來說我們想設置第一個視圖的寬度是第二個視圖寬度的2倍,我們可以這樣寫:

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:view2 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:view1 attribute:NSLayoutAttributeWidth multiplier:2 constant:0]];

可以看到這里我們item1是view1,item2是view2,attr1是attribute:NSLayoutAttributeWidth,attr2是attribute:NSLayoutAttributeWidth,relation是NSLayoutRelationEqual,mutiplier 是2,constant是0.

帶入上面的公式得:

第一個視圖(寬度) = 2 * 第二個視圖(寬度) + 0 

如下是我們所有可以控制的屬性:

NSLayoutAttributeLeft視圖的左邊
NSLayoutAttributeRight視圖的右邊
NSLayoutAttributeTop視圖的上邊
NSLayoutAttributeBottom視圖的下邊
NSLayoutAttributeLeading視圖的前邊
NSLayoutAttributeTrailing視圖的后邊
NSLayoutAttributeWidth視圖的寬度
NSLayoutAttributeHeight視圖的高度
NSLayoutAttributeCenterX視圖的中點的X值
NSLayoutAttributeCenterY視圖中點的Y值
NSLayoutAttributeBaseline視圖的基準線
NSLayoutAttributeNotAnAttribute無屬性

 

  

 

 

 

 

 

 

 

 

 

 

 

這里解釋一下前邊NSLayoutAttributeLeading和后邊NSLayoutAttributeTrailing,這里前邊和后邊并不是總是為左邊和右邊的,有些國家的前邊是右邊后邊是左邊所以這樣設定是為了國際化考慮。還有視圖基準線NSLayoutAttributeBaseline通常是指視圖的底部放文字的地方。

  接下我們一起來看一個demo

  我們想讓兩個視圖Y方向居中,第一個視圖距離左邊緣20,第一個視圖以第二個視圖等大并且X方向距離為100。

 1 UIView *view1 = [[UIView alloc] init]; 2     UIView *view2 = [[UIView alloc] init]; 3     [self.view addSubview:view1]; 4     [self.view addSubview:view2]; 5     view1.translatesAutoresizingMaskIntoConstraints = NO; 6     view2.translatesAutoresizingMaskIntoConstraints = NO; 7     view1.backgroundColor = [UIColor blueColor]; 8     view2.backgroundColor = [UIColor grayColor]; 9     //set view1 height and width10     [view1 addConstraint:[NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:100]];11     [view1 addConstraint:[NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:100]];12     //set view2 height and width13     [self.view addConstraint:[NSLayoutConstraint constraintWithItem:view2 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:view1 attribute:NSLayoutAttributeWidth multiplier:1 constant:0]];14     [self.view addConstraint:[NSLayoutConstraint constraintWithItem:view2 attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:view1 attribute:NSLayoutAttributeHeight multiplier:1 constant:0]];15     //set relationship between view1 and view216     [self.view addConstraint:[NSLayoutConstraint constraintWithItem:view2 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:view1 attribute:NSLayoutAttributeRight multiplier:1 constant:100]];17     [self.view addConstraint:[NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:view2 attribute:NSLayoutAttributeCenterY multiplier:1 constant:0]];18     //set relationship between topView and view119     [self.view addConstraint:[NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1 constant:20]];20     [self.view addConstraint:[NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1 constant:0]];

下面我們一起來看一下這段代碼

注意 5、6行設置view的 translatesAutoresizingMaskIntoConstraints 屬性為NO,意思就是遵循autoLayout拋棄原有設置的高度寬度等,使用autolayout的視圖必須要設置該屬性。

10、11行設置view1的寬和高,大家可能已經發現item2為nil并且attrbute為attribute:NSLayoutAttributeNotAnAttribute,這樣做我們帶入公式就會明白

item1 = m * 0 + constant。也就是直接設置本視圖的寬和高。

13、14行是設置view2的寬高和view1相同,這里細心的同學可能會發現添加約束的對象并不是像上面設置寬高時的view1,而是它們共同的父視圖self.view。因為在autolayout中有這樣的規定,如果是一元約束,即只針對自己的約束,那么就直接添加在該視圖上。如果是二元約束,那么就必須要添加在它們的共同最近的父視圖上面。

15、16行是設置view1和view2的關系,設置view1和view2具有相同的Y,并且view2在view1右邊距離100的位置。

18、19行最后我們設置了view1左邊距離父視圖左邊20的距離,并且view1的Y等于父視圖Y的中點值。

通過以上的設置,我們運行的結果就是:

如圖,視圖1在距左邊20的位置,視圖1視圖2都Y方向居中并且相距100的距離。

刪除約束:

  removeConstraint:(NSLayoutConstraint *) constraint;

在刪除約束時要找準約束的綁定對象。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美亚洲激情视频| 欧美色视频日本版| 亚洲精品suv精品一区二区| www.欧美精品| 国产精品美女午夜av| 日日骚av一区| 久久久999精品视频| 国产精品美腿一区在线看| 日韩中文字幕国产| 国产成人一区二区三区小说| 午夜精品国产精品大乳美女| 亚洲无限乱码一二三四麻| 成人免费观看a| 国产成人精品午夜| 国产一区二区三区免费视频| 久久99热精品这里久久精品| 国产免费一区二区三区香蕉精| 久久久中文字幕| 91av在线播放视频| 日日狠狠久久偷偷四色综合免费| 亚洲综合在线中文字幕| 亚洲美女中文字幕| 欧美精品18videos性欧美| 欧美性少妇18aaaa视频| 中文欧美在线视频| 国产午夜精品免费一区二区三区| 亚洲在线观看视频网站| 亚洲精品女av网站| 日本成人免费在线| 国产日韩欧美在线观看| 国产成人福利视频| 亚洲欧洲成视频免费观看| 日韩经典第一页| 亚洲欧美另类自拍| 亚洲成人三级在线| 欧美亚洲国产日本| 91av视频在线观看| 亚洲视频axxx| 色偷偷888欧美精品久久久| 亚州成人av在线| 国产成人福利网站| 国产一区二区三区中文| 亚洲精品国精品久久99热一| 亚洲精品一区久久久久久| 国产精品国内视频| 国产日韩精品一区二区| 亚洲国产精品资源| 久久久国产精彩视频美女艺术照福利| 成人免费网站在线看| 国产一区二区三区日韩欧美| 国产成人精品免高潮在线观看| 亚洲国产成人久久| 91av在线看| 亚洲日本成人网| 97久久超碰福利国产精品…| 亚洲欧洲偷拍精品| 日韩福利视频在线观看| 一色桃子一区二区| 亚洲高清不卡av| 久久99热这里只有精品国产| 91精品久久久久久久久久入口| 日韩精品极品在线观看播放免费视频| 亚洲成人av片在线观看| 亚洲精品国产电影| 插插插亚洲综合网| 国产精品日日做人人爱| 91国内精品久久| 欧美性猛交xxxx富婆弯腰| 成人精品一区二区三区电影黑人| 久久久久北条麻妃免费看| 成人免费观看49www在线观看| 亚洲老头同性xxxxx| 国产亚洲福利一区| 亚洲午夜国产成人av电影男同| 国产精品久久久亚洲| 色婷婷成人综合| 欧美老女人xx| 亚洲第一区在线观看| 热久久免费视频精品| 91系列在线播放| 亚洲欧洲日产国产网站| 亚洲精品videossex少妇| 日韩精品极品视频免费观看| 视频在线观看一区二区| 久久久久久久久久国产精品| 久久亚洲精品一区| 欧美激情成人在线视频| 国产精品国产自产拍高清av水多| 日韩精品免费在线视频观看| 国产成人精品亚洲精品| 国产性猛交xxxx免费看久久| 91国产精品视频在线| 国产福利精品视频| 久久精品中文字幕免费mv| 久久综合亚洲社区| 亚州国产精品久久久| 亚洲一区二区在线| 一道本无吗dⅴd在线播放一区| 国产欧美日韩免费看aⅴ视频| 国产成人亚洲综合青青| 色综合影院在线| 欧美成人在线网站| 亚洲欧美精品中文字幕在线| 欧美日韩福利视频| xvideos成人免费中文版| 欧美国产精品日韩| 日韩精品视频三区| 亚洲精品91美女久久久久久久| 理论片在线不卡免费观看| 欧美高清视频一区二区| 精品国内产的精品视频在线观看| 俺去了亚洲欧美日韩| 欧美亚洲视频在线看网址| 久久久国产视频91| 日韩av综合网站| 国产mv久久久| 国产日韩欧美另类| 伊人伊成久久人综合网站| 亚洲国产精品成人va在线观看| 国产在线视频一区| 国产精品久久久久久av福利| 亚洲乱码一区二区| 亚洲国产欧美精品| 亚洲精品永久免费精品| 成人黄色片网站| 亚洲欧美在线免费观看| 亚洲女人天堂网| 亚洲香蕉成视频在线观看| 亚洲女在线观看| 毛片精品免费在线观看| 国产精品一区二区三区毛片淫片| 一本一道久久a久久精品逆3p| 国产91精品久久久久久久| 日韩视频免费看| 97精品国产aⅴ7777| 亚洲福利影片在线| 九九热这里只有精品6| 日本精品久久久| 日日摸夜夜添一区| www.亚洲免费视频| 97视频在线观看免费高清完整版在线观看| 欧美日韩亚洲一区二区三区| 亚洲视频视频在线| xxxxxxxxx欧美| 黄色成人av网| 精品久久久久国产| 日韩美女在线观看一区| 国产精品视频xxx| 国产精品青草久久久久福利99| 欧美成人午夜激情视频| 国产精品18久久久久久麻辣| 亚洲一区中文字幕| 青草青草久热精品视频在线网站| 欧美午夜丰满在线18影院| 国产69精品99久久久久久宅男| 精品电影在线观看| 日本久久中文字幕| 91麻豆桃色免费看| 久久久久久综合网天天| 欧美性xxxxx极品娇小| 亚洲欧美综合精品久久成人| 精品久久久久久久大神国产| 91天堂在线观看| 久久久久久国产精品美女|