你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS7技巧 >> Swift自動布局庫SnapKit的約束的更新、移除、重做例子

Swift自動布局庫SnapKit的約束的更新、移除、重做例子

編輯:IOS7技巧
本文章來為各位介紹一篇關於Swift自動布局庫SnapKit的約束的更新、移除、重做例子,希望這個文章可以為大家帶來幫助,具體的如下所示。

在之前的文章中我介紹了如何使用SnapKit的 snp_makeConstraints 方法進行各種約束的設置。但有時我們的頁面並不是一直固定不變的,這就需要修改已經存在的約束。本文介紹如何更新、移除、代替現有的約束。

1,刪除約束

要實現對現有的約束進行更新或者移除,我們需要先將約束的結果賦值給一個局部變量或一個類屬性,然後對這個約束的引用進行操作。
比如下面樣例:開始時我們給橙色方塊添加了個距屏幕上方40像素的約束,點擊按鈕後使用 uninstall() 方法把這個約束給移除。


import UIKit
import SnapKit
 
class ViewController: UIViewController {
    
    lazy var box = UIView()
    
    //保存約束的引用
    var topConstraint:Constraint?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        box.backgroundColor = UIColor.orangeColor()
        self.view.addSubview(box)
        
        box.snp_makeConstraints { (make) -> Void in
            make.width.height.equalTo(150)
            make.centerX.equalTo(self.view)
            self.topConstraint = make.top.equalTo(self.view).offset(40).constraint
        }
    }
    
    //按鈕點擊
    @IBAction func btnTouch(sender: AnyObject) {
        //移除約束
        self.topConstraint?.uninstall()
    }
}

2,通過約束的引用來更新約束
還是以上面距屏幕上方40像素的約束為例,點擊按鈕後,通過調用約束引用的 updateOffset() 方法把距離修改成60像素。


import UIKit
import SnapKit
 
class ViewController: UIViewController {
    
    lazy var box = UIView()
    
    //保存約束的引用
    var topConstraint:Constraint?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        box.backgroundColor = UIColor.orangeColor()
        self.view.addSubview(box)
        
        box.snp_makeConstraints { (make) -> Void in
            make.width.height.equalTo(150)
            make.centerX.equalTo(self.view)
            self.topConstraint = make.top.equalTo(self.view).offset(40).constraint
        }
    }
    
    //按鈕點擊
    @IBAction func btnTouch(sender: AnyObject) {
        //更新修改約束
        self.topConstraint?.updateOffset(60)
    }
}

3,使用snp_updateConstraints更新約束

我們還可以用 snp_updateConstraints 方法來代替 snp_makeConstraints 進行約束的更新,這個更新操作通常放在 UIViewController 的 updateViewConstraints() 方法中,或者 UIView 的 updateConstraints() 方法中執行,這樣視圖約束需要更新的時候會自動調用。
比如下面樣例,我們使用 snp_updateConstraints() 方法設置橙色視圖的寬度約束為與屏幕等寬,這樣不管設備如何旋轉,視圖都回自動更新約束撐滿屏幕。


import UIKit
import SnapKit
 
class ViewController: UIViewController {
    
    lazy var box = UIView()
    
   
    override func viewDidLoad() {
        super.viewDidLoad()
        
        box.backgroundColor = UIColor.orangeColor()
        self.view.addSubview(box)
        
        box.snp_makeConstraints { (make) -> Void in
            make.height.equalTo(150)
            make.centerX.equalTo(self.view)
        }
    }
  
    //視圖約束更新
    override func updateViewConstraints() {
        self.box.snp_updateConstraints{ (make) -> Void in
            //視圖寬度與屏幕等寬
            make.width.equalTo(self.view)
        }
  
        super.updateViewConstraints()
    }
}

4,使用snp_remakeConstraints重做約束
snp_remakeConstraints 與 snp_makeConstraints 用法類似,不同的是 snp_remakeConstraints 首先會先清除掉之前所有被SnapKit設置的約束。

下面樣例:初始化時橙色視圖約束是寬高150,水平居中。點擊按鈕後重做約束,寬高變100,且不再居中。
     


import UIKit
import SnapKit
 
class ViewController: UIViewController {
    
    lazy var box = UIView()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        box.backgroundColor = UIColor.orangeColor()
        self.view.addSubview(box)
        
        box.snp_makeConstraints { (make) -> Void in
            make.width.height.equalTo(150)
            make.centerX.equalTo(self.view)
        }
    }
  
    //按鈕點擊
    @IBAction func btnTouch(sender: AnyObject) {
        //重做約束
        box.snp_remakeConstraints { (make) -> Void in
            make.width.height.equalTo(100)
        }
    }
}

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved