iOS-UI布局是約束(Masonry)還是frame?雖各有優(yōu)缺點,但使用frame真心沒前途

最近在面試以及與其余程序猿(不乏來自BAT大廠)的交流當(dāng)中,我發(fā)現(xiàn)還是有相當(dāng)大一部分是使用frame,為此也就出現(xiàn)了這篇文章。

在遠古時代使用的都是frame,很多4年以上的程序猿都是從frame開始的,但是那個只適用于iPhone 4這個3.5寸的手機,這是因為:frame是絕對布局,一旦設(shè)置,其origin(x,y)與size(width,height)便固定死了,不可更改。為此在尺寸不更改以及系統(tǒng)版本不更新的情況下是沒問題的,比如一直是3.5寸手機,iOS7系統(tǒng)等,但是這是不可能的。

但是約束(Masonry)就不一樣了,約束是一種相對布局,可以很好的適配所有情況,比如比如有無navigationBar,有無tabbar,iPhone X和非iPhone X,還有橫豎屏等。這些情況都是動態(tài)的,使用約束可以很好的展現(xiàn)。

比如下面這個常見VC布局:


一個常見的VC布局

如果使用frame就很簡單了,代碼如下:

    self.view.backgroundColor = [UIColor greenColor];
    
    UIView *blueView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100, 100)];
    blueView.backgroundColor = [UIColor blueColor];
    self.blueView = blueView;
    [self.view addSubview:blueView];
    
    UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(0.0, CGRectGetHeight(self.view.frame) - 100.0, 100.0, 100.0)];
    redView.backgroundColor = [UIColor redColor];
    [self.view addSubview:redView];

但是這個樣子隱患非常大:非常不易于拓展。比如有無navigationBar,有無tabbar,iPhone X和非iPhone X,還有橫豎屏。倘若一直對frame進行設(shè)置,那就太麻煩了。

使用約束(Masonry)就簡單多了,鏈接:《iOS - 適配iPhone X與iOS11最優(yōu)雅的解決方法,沒有之一》。一個if else語句就直接就適配了有無navigationBar,有無tabbar,iPhone X和非iPhone X,還有橫豎屏等所有情況。效果如下:

有navigationBar和tabbar的情況

iPhone X橫屏

除了這種情況之外,還有一種情況下是使用約束比frame要簡單,那就是類似評論功能,其代碼鏈接是《iOS-UITableViewCell自適應(yīng)高度最優(yōu)雅的方法》。效果如下:

評論自適應(yīng)高度

以上是最常見的約束優(yōu)于frame的兩種情況,由此衍生出來的,比如Label根據(jù)內(nèi)容自適應(yīng)高度等等,都比frame要強的多,那是因為使用frame的話,在給label賦完值之后還會調(diào)用一個sizeToFit或者layoutIfNeeded等方法,實在是麻煩,甚至在我看來根本都沒法去維護。

這里小編就先對其做一個簡單的對照:
1.frame是絕對布局,死值,而約束則既可以設(shè)置死值又可以設(shè)置一個相對值
2.frame在不同尺寸,不同系統(tǒng)下的適配性很低,也不易拓展,約束則不然、3.frame使用起來簡單,但是拓展性較差,而約束對程序猿來說代價比較大,也是比較考驗邏輯的
4.最重要的是蘋果對約束的支持越來越好,frame已窮途末路

在小編看來:雖然frame使用起來比較簡單,但是約束(Masonry)無論是拓展還是適配等方面優(yōu)勢十分大,可以說使用使用frame真心沒前途。

個人第三方庫:UDUserDefaultsModel

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 深入下一環(huán),才能服務(wù)好下一環(huán)。今天去搭了東門口的環(huán)境,爬到梯子的頂端,把原先的點位拆下來,再換我們的點位上去。雖然...
    許一的差評家學(xué)閱讀 240評論 0 1
  • 上學(xué)時,每當(dāng)發(fā)下語文課本,都會仔細的從頭看到尾,尤其看到書本里描寫的海南島,小興安嶺,美麗的西沙群島,臺灣的日月潭...
    學(xué)著提醒幸福閱讀 552評論 0 0
  • 一早醒來,看到今天是個睛朗的好天氣,在冬季里這樣的天氣好難得,我決定獨自登鼓山看楓葉,這幾天天晴加上早晚特別冷,想...
    夢姐閱讀 768評論 2 5

友情鏈接更多精彩內(nèi)容