IOS屏幕適配

屏幕適配的發(fā)展歷史

  • iPhone3GS\iPhone4

    • 沒有屏幕適配可言
    • 全部用frame邮辽、bounds唠雕、center進(jìn)行布局
    • 很多這樣的現(xiàn)象:坐標(biāo)值、寬度高度值全部寫死 objc UIButton *btn1 = [[UIButton alloc] init]; btn1.frame = CGRectMake(0, 0, 320 - b, 480 - c);
  • iPad出現(xiàn)吨述、iPhone橫屏

  • 出現(xiàn)Autoresizing技術(shù)

  • 讓橫豎屏適配相對簡單

  • 讓子控件可以跟隨父控件的行為自動(dòng)發(fā)生相應(yīng)的變化

  • 前提是:關(guān)閉Autolayout功能

  • 局限性

    • 只能解決子控件跟父控件的相對關(guān)系問題
    • 不能解決兄弟控件的相對關(guān)系問題
  • iOS 6.0(Xcode4)開始

  • 出現(xiàn)了Autolayout技術(shù)

  • 從Xcode5.0(iOS 7.0)開始岩睁,開始流行Autolayout

  • Xib預(yù)覽可以查看所有設(shè)備下的當(dāng)前控件的位置


    Xib預(yù)覽可以查看所有設(shè)備下的當(dāng)前控件的位置
  • Autoresizing

    • 在Autolayout之前,有Autoresizing可以作屏幕適配揣云,但局限性較大捕儒,有些任務(wù)根本無法完成
    • 相比之下,Autolayout的功能比Autoresizing強(qiáng)大很多
  • Autolayout的2個(gè)核心概念

    • 參照
    • 約束


      Autolayout常用面板01-約束處理.png

      Autolayout常用面板03-對齊.png

      Autolayout常用面板02-相對.png
  • Autolayout的警告和錯(cuò)誤

    • 警告
      • 控件的frame不匹配所添加的約束, 比如
      • 比如約束控件的寬度為100, 而控件現(xiàn)在的寬度是110
    • 錯(cuò)誤
      • 缺乏必要的約束, 比如
      • 只約束了寬度和高度, 沒有約束具體的位置
    • 兩個(gè)約束沖突, 比如

      • 1個(gè)約束控件的寬度為100, 1個(gè)約束控件的寬度為110
  • 關(guān)于Autolayout的動(dòng)畫

    • Autolayout的動(dòng)畫 用普通的方法改變約束的值
    UIView animateWithDuration:2.0 animations:^{
        //[改變約束的值] 這種做法是沒有動(dòng)畫效果
    }];
    [UIView animateWithDuration:2.0 animations:^{
        /**
         * 想要AutoLayout的約束有動(dòng)畫,需要調(diào)用控件的[控件名字 layoutIfNeeded]方法
         */
        [self.blueView layoutIfNeeded];
    }];
    
  • 代碼實(shí)現(xiàn)AutoLayout

    • 代碼實(shí)現(xiàn)Autolayout的步驟
    • 利用NSLayoutConstraint類創(chuàng)建具體的約束對象
    • 添加約束對象到相應(yīng)的view上
    • 代碼實(shí)現(xiàn)Autolayout的注意點(diǎn)
    • 要先禁止autoresizing功能刘莹,設(shè)置view的下面屬性為NO
    • view.translatesAutoresizingMaskIntoConstraints = NO;
    • 添加約束之前阎毅,一定要保證相關(guān)控件都已經(jīng)在各自的父控件上
    • 不用再給view設(shè)置frame
/**
        - view1 :要約束的控件
        - attr1 :約束的類型(做怎樣的約束)距離左右上下
        - relation :與參照控件之間的關(guān)系
            - NSLayoutRelationLessThanOrEqual小于等于
            - NSLayoutRelationEqual  等于
            - NSLayoutRelationGreaterThanOrEqual 大于等于
        - toItem: 和其他控件做比較
        - view2 :參照的控件
        - attr2 :約束的類型(做怎樣的約束)
        - multiplier :乘數(shù)
        - c :常量
     */
+(instancetype)constraintWithItem:(id)view1 
attribute:(NSLayoutAttribute)attr1 
relatedBy:(NSLayoutRelation)relation 
toItem:(nullable id)view2 
attribute:(NSLayoutAttribute)attr2 
multiplier:(CGFloat)multiplier 
constant:(CGFloat)c;
  • Masonry簡介
    • 目前最流行的Autolayout第三方框架
    • 用優(yōu)雅的代碼方式編寫Autolayout
    • 省去了蘋果官方惡心的Autolayout代碼
    • 大大提高了開發(fā)效率
    • 框架地址 https://github.com/SnapKit/Masonry
  • Masonry的基本使用
    • 默認(rèn)情況下

      • mas_equalTo有自動(dòng)包裝功能,比如自動(dòng)將20包裝為@20
      • equalTo沒有自動(dòng)包裝功能
    • mas_equalTo和equalTo

      • 如果添加了下面的宏点弯,那么mas_equalTo和equalTo就沒有區(qū)別
      • (#)define MAS_SHORTHAND_GLOBALS
      • 注意:這個(gè)宏一定要添加到#import "Masonry.h"前面
    • 默認(rèn)情況下

      • width是make對象的一個(gè)屬性扇调,用來添加寬度約束用的,表示對寬度進(jìn)行約束
      • mas_width是一個(gè)屬性值抢肛,用來當(dāng)做equalTo的參數(shù)狼钮,表示某個(gè)控件的寬度屬性
    • mas_width和width

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熬芜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子锦援,更是在濱河造成了極大的恐慌猛蔽,老刑警劉巖剥悟,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灵寺,死亡現(xiàn)場離奇詭異,居然都是意外死亡区岗,警方通過查閱死者的電腦和手機(jī)略板,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慈缔,“玉大人叮称,你說我怎么就攤上這事∶旰祝” “怎么了瓤檐?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長娱节。 經(jīng)常有香客問我挠蛉,道長,這世上最難降的妖魔是什么肄满? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任谴古,我火速辦了婚禮,結(jié)果婚禮上稠歉,老公的妹妹穿的比我還像新娘掰担。我一直安慰自己,他們只是感情好怒炸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布带饱。 她就那樣靜靜地躺著,像睡著了一般阅羹。 火紅的嫁衣襯著肌膚如雪纠炮。 梳的紋絲不亂的頭發(fā)上月趟,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機(jī)與錄音恢口,去河邊找鬼孝宗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛耕肩,可吹牛的內(nèi)容都是我干的因妇。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼猿诸,長吁一口氣:“原來是場噩夢啊……” “哼婚被!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起梳虽,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤址芯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后窜觉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谷炸,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年禀挫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旬陡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡语婴,死狀恐怖描孟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情砰左,我是刑警寧澤匿醒,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站缠导,受9級特大地震影響廉羔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酬核,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一蜜另、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嫡意,春花似錦举瑰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春耸序,著一層夾襖步出監(jiān)牢的瞬間忍些,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工坎怪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留罢坝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓搅窿,卻偏偏與公主長得像嘁酿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子男应,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容