天天看點

IOS開發-自動布局Autoresizing和Autolayout

蘋果的自動布局有兩種:

(1)Autoresizing

(2)Autolayout

下面先介紹Autoresizing:

在開始使用前,我們要對xcode進行設定,因為預設xcode是打開Autolayout的,按照下面兩張圖就能打開Autoresizing了。

IOS開發-自動布局Autoresizing和Autolayout

然後按照下圖,選到對應頁籤就能使用autoresizing的功能了。

IOS開發-自動布局Autoresizing和Autolayout

現在用autoresizing做一個練習,讓一個控件始終在父控件右下角,如下圖設定對應 的view就可以了:(點選就可以取消或者添加)

IOS開發-自動布局Autoresizing和Autolayout

這樣運作就行了。方框外面是控件與父控件的邊距,小方框裡面是設定控件的寬高。

當然 我們也可以通過代碼設定控件的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相應的屬性:

IOS開發-自動布局Autoresizing和Autolayout

接下來就按照這樣設定就能得到跟上面要求的效果一緻了:

IOS開發-自動布局Autoresizing和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];
           

大家看到要做到這個效果就要打這麼多代碼。

大概這些就是這兩個自動布局的初步介紹了。