- Constraint 修改約束
效果圖.gif
// ViewController.swift
import UIKit
var TopScaleImg_H: CGFloat = 300
class ViewController: UIViewController {
var topConstraint:Constraint?
lazy var topScaleImgView: UIImageView = {
let img = UIImageView(image: UIImage(named: "home_block_green_a"))
img.contentMode = .ScaleAspectFill
img.backgroundColor = UIColor.orangeColor()
return img
}()
lazy var tableView: UITableView = {
let t = UITableView(frame: CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height), style: .Plain)
t.contentInset = UIEdgeInsets(top: TopScaleImg_H, left: 0, bottom: 0, right: 0)
t.delegate = self
t.dataSource = self
t.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cellID")
return t
}()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.tableView.backgroundColor = UIColor.clearColor()
self.view.addSubview(self.tableView)
self.view.insertSubview(self.topScaleImgView, belowSubview: tableView)
self.topScaleImgView.snp_makeConstraints { (make) in
make.left.equalTo(self.view.snp_left)
make.right.equalTo(self.view.snp_right)
make.top.equalTo(self.view.snp_top)
self.topConstraint = make.height.equalTo(TopScaleImg_H).constraint
}
}
func scrollViewDidScroll(scrollView: UIScrollView) {
let offsetY = scrollView.contentOffset.y
if offsetY < 0{
self.topConstraint?.updateOffset(-offsetY)
}else{
self.topConstraint?.updateOffset(offsetY)
}
}
}
extension ViewController: UITableViewDelegate, UITableViewDataSource{
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 30
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .Default, reuseIdentifier: "cellID")
cell.textLabel?.text = "row \(indexPath.row)"
cell.backgroundColor = UIColor.grayColor()
return cell
}
}
常用總結:
-
重做約束:
snp_remakeConstraints (先會先清除掉之前所有被SnapKit設置的約束。)
+ 刪除約束:
- 要實現對現有的約束進行更新或者移除,我們需要先將約束的結果賦值給一個局部變量或一個類屬性,然后對這個約束的引用進行操作。
- 保存 相關約束
view.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
} - 移除約束
self.topConstraint?.uninstall()
+ 更新修改相關約束
- 保存 約束 引用
var topConstraint:Constraint?
topView.snp_makeConstraints { (make) -> Void in
make.width.height.equalTo(100)
make.centerX.equalTo(self.view)
self.topConstraint = make.top.equalTo(self.view).offset(10).constraint
} - 更新修改約束
self.topConstraint?.updateOffset(5)
+ 使用snp_updateConstraints更新約束