標籤:
蘋果的自動布局有兩種:
(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 = 0, //這下面四個是設定那一個方向的Autoresizing是沒有固定的,也就是在面板那裡這個線不是紅色的。 UIViewAutoresizingFlexibleLeftMargin = 1 << 0, //比如設定這個屬性,就意味著左邊那根線是沒有選中的 UIViewAutoresizingFlexibleRightMargin = 1 << 2, UIViewAutoresizingFlexibleTopMargin = 1 << 3, UIViewAutoresizingFlexibleBottomMargin = 1 << 5 UIViewAutoresizingFlexibleWidth = 1 << 1, //寬度跟隨父控制項的寬度變化 UIViewAutoresizingFlexibleHeight = 1 << 4, //高度跟隨父控制項的高度變化 };
這樣設定好就跟剛才需要的效果一致了。無論螢幕怎麼旋轉都是在右下角。
但是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:0.0 constant:100]; [self.startButton addConstraint:widthConstraint]; //添加高度約束 40 NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:self.startButton attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0.0 constant:50]; [self.startButton addConstraint:heightConstraint]; //添加右邊約束 NSLayoutConstraint *rightConstraint = [NSLayoutConstraint constraintWithItem:self.startButton attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]; [self.view addConstraint:rightConstraint]; //添加底部約束 NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint constraintWithItem:self.startButton attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]; [self.view addConstraint:bottomConstraint];
大家看到要做到這個效果就要打這麼多代碼。
大概這些就是這兩個自動布局的初步介紹了。
IOS開發-自動布局Autoresizing和Autolayout