Swift 純代碼布局框架 SnapKit 基本用法

本文就簡單介紹一下SnapKit基本的使用蔗喂。就說明一下視每種視圖之間關(guān)系的情況下再姑,怎么建立約束,從而見見了解SnapKit编整。都是一些基本用法 舔稀。
以前使用過MasonrySDAutoLayout會容易比較容易上手的

第一種情況 掌测、父視圖包含子視圖内贮,子視圖在父視圖中的布局(常用的有3種寫法)
寫法一
    func testDemo(){
        let bgView = UIView()
        bgView.backgroundColor = UIColor.yellow
        self.view.addSubview(bgView)
 
        let box1 = UIView()
        box1.backgroundColor = UIColor.blue
        bgView.addSubview(box1)

        //父視圖
        bgView.snp.makeConstraints { (make) in
            make.center.equalToSuperview()
            make.size.equalTo(350)
        }
        //第一個子視圖 --- 重點在這里
        box1.snp.makeConstraints { (make) in
            make.center.equalToSuperview() //設(shè)置中心點,為父視圖的中心點
            make.width.height.equalTo(200)//設(shè)置大小為200*200 等價make.size.equalTo(200)
        }

        let label = UILabel()
        label.text = "第一種"
        self.view.addSubview(label)
        label.snp.makeConstraints { (make) in
            make.center.equalToSuperview()
        }
    }
IMG_1479.PNG
寫法二
    func testDemo(){
        let bgView = UIView()
        bgView.backgroundColor = UIColor.yellow
        self.view.addSubview(bgView)
 
        let box1 = UIView()
        box1.backgroundColor = UIColor.blue
        bgView.addSubview(box1)

        //父視圖
        bgView.snp.makeConstraints { (make) in
            make.center.equalToSuperview()
            make.size.equalTo(350)
        }
        //第一個子視圖 --- 重點在這里
        box1.snp.makeConstraints { (make) in
            make.centerY.equalToSuperview()  //設(shè)置中心點的Y點汞斧,為父視圖的Y軸中點
            make.left.equalToSuperview().offset(10) //設(shè)置左邊距離父視圖為10 )
            make.right.equalToSuperview().offset(-10) //設(shè)置有邊距離父視圖為10 (這句代碼是右邊距離父視圖的寬度為參照 -10 就是往左減少10夜郁。10就是向右增加10)
            make.height.equalTo(100) //設(shè)置高度為100
        }

        let label = UILabel()
        label.text = "第二種"
        self.view.addSubview(label)
        label.snp.makeConstraints { (make) in
            make.center.equalToSuperview()
        }
    }
IMG_1480.PNG
寫法三
    func testDemo(){
        let bgView = UIView()
        bgView.backgroundColor = UIColor.yellow
        self.view.addSubview(bgView)
 
        let box1 = UIView()
        box1.backgroundColor = UIColor.blue
        bgView.addSubview(box1)

        //父視圖
        bgView.snp.makeConstraints { (make) in
            make.center.equalToSuperview()
            make.size.equalTo(350)
        }
        //第一個子視圖 --- 重點在這里
        box1.snp.makeConstraints { (make) in
          //這個是最簡單的,就是距離父視圖的上下左右的距離
            make.edges.equalToSuperview().inset(UIEdgeInsets(top: 100, left: 10, bottom: 10, right: 10))
        }

        let label = UILabel()
        label.text = "第三種"
        self.view.addSubview(label)
        label.snp.makeConstraints { (make) in
            make.center.equalToSuperview()
        }
    }
IMG_1481.PNG
第二種情況 断箫、兩個子視圖之間的關(guān)系進行布局(這個變化就多了拂酣,大家多多意會,我只寫當前的給大家參考)
    func testDemo(){
        let bgView = UIView()
        bgView.backgroundColor = UIColor.yellow
        self.view.addSubview(bgView)
 
        let box1 = UIView()
        box1.backgroundColor = UIColor.blue
        bgView.addSubview(box1)
        
        let box2 = UIView()
        box2.backgroundColor = UIColor.red
        bgView.addSubview(box2)
        //父視圖
        bgView.snp.makeConstraints { (make) in
            make.center.equalToSuperview()
            make.size.equalTo(350)
        }
        //第一個子視圖
        box1.snp.makeConstraints { (make) in
            make.top.equalToSuperview().offset(50)
            make.left.equalToSuperview().offset(0)
            make.width.equalTo(150)
            make.height.equalTo(100)
        }
        //第二個子視圖  -- 重點在這里
         box2.snp.makeConstraints { (make) in
            make.top.equalTo(box1.snp.top).offset(20) //top等于box1.top仲义,再向下偏離20
            make.left.equalTo(box1.snp.right).offset(10)//let等于box1.right 在向右偏離 10
            make.size.equalTo(box1.snp.height) //他的寬高都等于 box1.height
        }
    }
IMG_1482.PNG
關(guān)鍵字 multipliedBy,dividedBy 也比較常用
func testDemo(){
    let bgView = UIView()
    bgView.backgroundColor = UIColor.yellow
    self.view.addSubview(bgView)

    let box1 = UIView()
    box1.backgroundColor = UIColor.blue
    bgView.addSubview(box1)
    
    let box2 = UIView()
    box2.backgroundColor = UIColor.red
    bgView.addSubview(box2)
    //父視圖
    bgView.snp.makeConstraints { (make) in
        make.center.equalToSuperview()
        make.size.equalTo(350)
    }
    //第一個子視圖
    box1.snp.makeConstraints { (make) in
        make.top.equalToSuperview().offset(50)
        make.left.equalToSuperview().offset(10)
        make.width.height.equalTo(100)

    
    }
    //第二個子視圖  -- 重點在這里
     box2.snp.makeConstraints { (make) in
        make.top.equalTo(box1.snp.top).dividedBy(2) //頂部的距離等于box1.top*2
        make.right.equalToSuperview().offset(-10)
        make.height.equalTo(box1.snp.height).multipliedBy(0.5) //他的寬高都等于 box1.height*0.5
        make.left.equalTo(box1.snp.left).dividedBy(0.5) //left等于box1.left?0.5
     }
}
關(guān)鍵字 multipliedBy,dividedBy
priority 優(yōu)先級用法 婶熬,SnapKit一共提供了4種優(yōu)先級,優(yōu)先級順序是:required > high > medium > low埃撵。
    func testDemo(){
        let bgView = UIView()
        bgView.backgroundColor = UIColor.yellow
        self.view.addSubview(bgView)
 
        let box1 = UIView()
        box1.backgroundColor = UIColor.blue
        bgView.addSubview(box1)

        //父視圖
        bgView.snp.makeConstraints { (make) in
            make.center.equalToSuperview()
            make.size.equalTo(350)
        }
        //第一個子視圖
        box1.snp.makeConstraints { (make) in
    
            make.center.equalToSuperview().priority(.medium)
            make.right.equalToSuperview().offset(-10).priority(.high) //高于center 赵颅,肯定靠左
            make.top.equalToSuperview().offset(10).priority(.low) //低于center,肯定居中
            // size 和center 的優(yōu)先級沒啥沖突暂刘,不考慮 饺谬。但是自身的優(yōu)先級還是要考慮的
            make.size.equalTo(100).priority(.medium) //優(yōu)先級高 size = 100*100
            make.size.equalTo(200).priority(.low)
        }

    }
priority 優(yōu)先級用法
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子募寨,更是在濱河造成了極大的恐慌族展,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拔鹰,死亡現(xiàn)場離奇詭異仪缸,居然都是意外死亡,警方通過查閱死者的電腦和手機列肢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門恰画,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瓷马,你說我怎么就攤上這事拴还。” “怎么了欧聘?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵片林,是天一觀的道長。 經(jīng)常有香客問我树瞭,道長拇厢,這世上最難降的妖魔是什么爱谁? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任晒喷,我火速辦了婚禮,結(jié)果婚禮上访敌,老公的妹妹穿的比我還像新娘凉敲。我一直安慰自己,他們只是感情好寺旺,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布爷抓。 她就那樣靜靜地躺著,像睡著了一般阻塑。 火紅的嫁衣襯著肌膚如雪蓝撇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天陈莽,我揣著相機與錄音渤昌,去河邊找鬼。 笑死走搁,一個胖子當著我的面吹牛独柑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播私植,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼忌栅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了曲稼?” 一聲冷哼從身側(cè)響起索绪,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤湖员,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瑞驱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體破衔,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年钱烟,在試婚紗的時候發(fā)現(xiàn)自己被綠了晰筛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡拴袭,死狀恐怖读第,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拥刻,我是刑警寧澤怜瞒,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站般哼,受9級特大地震影響吴汪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蒸眠,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一漾橙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧楞卡,春花似錦霜运、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至池摧,卻和暖如春焦除,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背作彤。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工膘魄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宦棺。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓瓣距,卻偏偏與公主長得像,于是被迫代替她去往敵國和親代咸。 傳聞我的和親對象是個殘疾皇子蹈丸,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

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