蘋果的自動布局有兩種:
(1)Autoresizing
(2)Autolayout
下面先介紹Autoresizing:
在開始使用前,我們要對xcode進行設定,因為預設xcode是打開Autolayout的,按照下面兩張圖就能打開Autoresizing了。
然後按照下圖,選到對應頁籤就能使用autoresizing的功能了。
現在用autoresizing做一個練習,讓一個控件始終在父控件右下角,如下圖設定對應 的view就可以了:(點選就可以取消或者添加)
這樣運作就行了。方框外面是控件與父控件的邊距,小方框裡面是設定控件的寬高。
當然 我們也可以通過代碼設定控件的autoresizing。像上面的效果我們需要添加的代碼如下:
self.startButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleWidth;
其中autoresizingMask對應的值,下面來一個介紹:
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
UIViewAutoresizingNone = ,
//這下面四個是設定那一個方向的Autoresizing是沒有固定的,也就是在面闆那裡這個線不是紅色的。
UIViewAutoresizingFlexibleLeftMargin = << , //比如設定這個屬性,就意味着左邊那根線是沒有選中的
UIViewAutoresizingFlexibleRightMargin = << ,
UIViewAutoresizingFlexibleTopMargin = << ,
UIViewAutoresizingFlexibleBottomMargin = <<
UIViewAutoresizingFlexibleWidth = << , //寬度跟随父控件的寬度變化
UIViewAutoresizingFlexibleHeight = << , //高度跟随父控件的高度變化
};
這樣設定好就跟剛才需要的效果一緻了。無論螢幕怎麼旋轉都是在右下角。
但是Autoresizing有個缺點就是,他是用來設定與父控件的關系。如果遇到需要設定兩個同級的控件的關系,Autoresizing就不能做到了,這個時候我們就要接觸到Autolayout了。
xcode預設一建立項目就是支援Autolayout了。在下面這個位置就能設定Autolayout相應的屬性:
接下來就按照這樣設定就能得到跟上面要求的效果一緻了:
記得選擇update frames的值,不然控件還是保持原來的位置,實際上運作他是會改變位置,但是在xcode裡面是沒有直接重新整理。
當然我們也能通過代碼設定Autolayout達到上面的效果:
[self.startButton setBackgroundColor:[UIColor redColor]];
//這句必須設定
self.startButton.translatesAutoresizingMaskIntoConstraints = NO;
//添加寬度限制 100
NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:self.startButton attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier: constant:];
[self.startButton addConstraint:widthConstraint];
//添加高度限制 40
NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:self.startButton attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier: constant:];
[self.startButton addConstraint:heightConstraint];
//添加右邊限制
NSLayoutConstraint *rightConstraint = [NSLayoutConstraint constraintWithItem:self.startButton attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier: constant:];
[self.view addConstraint:rightConstraint];
//添加底部限制
NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint constraintWithItem:self.startButton attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier: constant:];
[self.view addConstraint:bottomConstraint];
大家看到要做到這個效果就要打這麼多代碼。
大概這些就是這兩個自動布局的初步介紹了。