關(guān)于SnapKit

參考 snapKitDocs孵稽、snapKit詳解

相信大家若看完上面兩個鏈接之后,一定會對snapKit有更進(jìn)一步的了解翁涤。啰嗦的話就不多說了形庭,這篇文章主要對平時開發(fā)中少用的一些關(guān)于snapKit的東西做了下test。用過snapKit或Masonry的同學(xué)可忽略上面鏈接埋酬,有興趣的話簡單看下哨啃。

  • Demo涉及知識點(diǎn):

  • ****priority 優(yōu)先級****

  • ****在約束改變的時候帶有動畫****

  • ****修正:位移修正(inset、offset)****

  • ****lessThanOrEqualTo(小于或等于)****

  • 啰嗦幾句

  • ****equal****

  • ****priority****

  • ****snp_remakeConstraints & snp_updateConstraints****

  • ****multipliedBy倍率修正 ****

configure: Xcode 8.0+, Swift 3.0+, snapKit 3.0+ .

//
//  ViewController.swift
//  snapKitDemo
//
//  Created by Hunter on 30/12/2016.
//  Copyright ? 2016 Hunter. All rights reserved.
//

import UIKit
import SnapKit

class ViewController: UIViewController {


    // MARK - property
    
    private var scacle = 1.0
    private var sizeConstraint: Constraint?
    private lazy var redV: UIView = {
       let temp = UIView()
        temp.backgroundColor = UIColor.red
        let tapSingle=UITapGestureRecognizer(target:self,action:#selector(tap))
        self.view.addGestureRecognizer(tapSingle)
        return temp
    }()
    private lazy var redSubCyanV: UIView = {
        let temp = UIView()
        temp.backgroundColor = UIColor.cyan
        return temp
    }()
    

    // MARK - override
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // add
        view.addSubview(redV)
        redV.addSubview(redSubCyanV)
        
        // layout
        redV.snp.makeConstraints { (make) in // size最大為300
            sizeConstraint = make.width.height.equalTo(100).priority(1).constraint
            make.size.lessThanOrEqualTo(CGSize.init(width: 300, height: 300))
        }
        redSubCyanV.snp.makeConstraints { (make) in
            make.edges.equalToSuperview().inset(UIEdgeInsetsMake(10, 10, 10, 10))
        }
    }
    
    // updateViewConstraints
    
    override func updateViewConstraints() { // 官方推薦写妥,更新視圖的約束拳球,在這里進(jìn)行操作
        redV.snp.updateConstraints { (make) in
            sizeConstraint?.update(offset: 100 * scacle) // 更新保存的約束
        }
        super.updateViewConstraints()
    }
    
    
    // MARK - tap
    
    @objc private func tap(sender: UITapGestureRecognizer) {
        scacle += 1
        self.view.setNeedsUpdateConstraints() // 若想達(dá)到動畫效果,這兩個方法一定要這樣配合使用珍特,不然你試試.
        UIView.animate(withDuration: 0.3) { [weak self] in
            self?.view.layoutIfNeeded()
        }
    }
    
    /*
     priority注意: makeConstraints與updateViewConstraints時祝峻,需同時設(shè)置優(yōu)先級,
     且優(yōu)先級小于1000扎筒,若等于1000 無效莱找,大于1000 crash。
     snapKit3.0,棄用 priorityLow嗜桌、priorityMedium奥溺、priorityHigh、priorityRequired骨宠。
     */
    
    /*
     關(guān)于Constraint這里不做太多介紹浮定,常用的就是我們可以保存約束,然后可以進(jìn)行层亿,
     更新壶唤,
     update(offset: ConstraintOffsetTarget)
     update(inset: ConstraintInsetTarget)
     update(priority: ConstraintPriorityTarget)
     刪除 
     deactivate()
     */
     /*
      updateConstraints更新約束,只更新棕所,改變的約束.
     */
}
最終實(shí)現(xiàn)效果圖

equal

equalToSuperview() 等于父視圖
equalTo(<#T##other: ConstraintRelatableTarget##ConstraintRelatableTarget#>) 等于目標(biāo)關(guān)聯(lián)闸盔,這個用的最多是不是,??
lessThanOrEqualTo(<#T##other: ConstraintRelatableTarget##ConstraintRelatableTarget#>)小于等于目標(biāo)關(guān)聯(lián)
greaterThanOrEqualTo(<#T##other: ConstraintRelatableTarget##ConstraintRelatableTarget#>) 大于等于目標(biāo)關(guān)聯(lián)
lessThanOrEqualToSuperview()小于等于父視圖
greaterThanOrEqualToSuperview()大于等于父視圖

priority

priorityLow():設(shè)置低優(yōu)先級,優(yōu)先級為250
priorityMedium():設(shè)置中優(yōu)先級琳省,優(yōu)先級為500(這個也就是默認(rèn)的優(yōu)先級)
priorityHigh():設(shè)置高優(yōu)先級迎吵,優(yōu)先級為750
priority():可以設(shè)置任意的優(yōu)先級躲撰,接受的參數(shù)是0-1000的數(shù)字。比如:priority(600)

snp_remakeConstraints & snp_updateConstraints

1击费,snp_remakeConstraints相當(dāng)于先snp_removeConstraints拢蛋,再snp_makeConstraints。兩種方式效率沒區(qū)別蔫巩。不過重做約束還是建議用snp_remakeConstraints谆棱,不僅少寫一個方法,代碼邏輯看起來也更清晰圆仔。
2垃瞧,不同于snp_remakeConstraints重做所有的約束。 snp_updateConstraints用于只更新部分約束坪郭。

multipliedBy

// 寬高比16:9
make.height.equalTo(constrintView.snp.width).multipliedBy(9.0 / 16)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末个从,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子歪沃,更是在濱河造成了極大的恐慌嗦锐,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沪曙,死亡現(xiàn)場離奇詭異奕污,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)液走,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進(jìn)店門碳默,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人育灸,你說我怎么就攤上這事腻窒£怯睿” “怎么了磅崭?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瓦哎。 經(jīng)常有香客問我砸喻,道長,這世上最難降的妖魔是什么蒋譬? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任割岛,我火速辦了婚禮,結(jié)果婚禮上犯助,老公的妹妹穿的比我還像新娘癣漆。我一直安慰自己,他們只是感情好剂买,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布惠爽。 她就那樣靜靜地躺著癌蓖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪婚肆。 梳的紋絲不亂的頭發(fā)上租副,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天,我揣著相機(jī)與錄音较性,去河邊找鬼用僧。 笑死,一個胖子當(dāng)著我的面吹牛赞咙,可吹牛的內(nèi)容都是我干的责循。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼人弓,長吁一口氣:“原來是場噩夢啊……” “哼沼死!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起崔赌,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤意蛀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后健芭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體县钥,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年慈迈,在試婚紗的時候發(fā)現(xiàn)自己被綠了若贮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡痒留,死狀恐怖谴麦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伸头,我是刑警寧澤匾效,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站恤磷,受9級特大地震影響面哼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扫步,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一魔策、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧河胎,春花似錦闯袒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽原茅。三九已至,卻和暖如春堕仔,著一層夾襖步出監(jiān)牢的瞬間擂橘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工摩骨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留通贞,地道東北人。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓恼五,卻偏偏與公主長得像昌罩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子灾馒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評論 2 361

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