Какая разница между .offset и .inset в SnapKit?
В SnapKit .offset и .inset выполняют внешне похожие действие. В каких случаях правильно будет использовать .offset(), а в каких .inset()?
Ответы (1 шт):
Автор решения: schmidt9
→ Ссылка
Если вкратце - для верхней и левой границы offset и inset дают одинаковый результат, а для правой и нижней - противоположный. Это значит например, что если если левую границу вью 1 прикрепить к правой границе вью 2, то положительный offset сдвинет вью 2 вправо, а inset влево, ну и если одно вью внутри другого, то результат тоже будет разный.
В целом эти методы взаимозаменяемы, если держать в уме указанные нюансы и корректировать значения
Смотрим пример из документации
let box = UIView()
superview.addSubview(box)
box.snp.makeConstraints { (make) -> Void in
make.top.equalTo(superview).offset(20)
make.left.equalTo(superview).offset(20)
make.bottom.equalTo(superview).offset(-20)
make.right.equalTo(superview).offset(-20)
}
То же самое что
box.snp.makeConstraints { (make) -> Void in
make.edges.equalTo(superview).inset(UIEdgeInsetsMake(20, 20, 20, 20))
}
Вот еще пример для наглядности
import UIKit
import SnapKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let greenBox = UIView()
self.view.addSubview(greenBox)
greenBox.backgroundColor = .green
greenBox.snp.makeConstraints { (make) in
make.width.height.equalTo(50)
make.center.equalTo(self.view)
}
// offset to green
let redBox = UIView()
self.view.addSubview(redBox)
redBox.backgroundColor = .red
redBox.snp.makeConstraints { (make) in
make.width.height.equalTo(50)
make.leading.equalTo(greenBox.snp.trailing).offset(20)
make.top.equalTo(greenBox.snp.bottom)
}
// inset to green
let blueBox = UIView()
self.view.addSubview(blueBox)
blueBox.backgroundColor = .blue
blueBox.snp.makeConstraints { (make) in
make.width.height.equalTo(50)
make.leading.equalTo(greenBox.snp.trailing).inset(20)
make.top.equalTo(redBox.snp.bottom)
}
// offset black inside yellow
let yellowBox = UIView()
self.view.addSubview(yellowBox)
yellowBox.backgroundColor = .yellow
yellowBox.snp.makeConstraints { (make) in
make.width.height.equalTo(50)
make.leading.equalTo(greenBox.snp.trailing)
make.top.equalTo(blueBox.snp.bottom)
}
let blackBox = UIView()
yellowBox.addSubview(blackBox)
blackBox.backgroundColor = .black
blackBox.snp.makeConstraints { (make) in
make.edges.equalTo(yellowBox).offset(10)
}
// inset purple inside gray
let grayBox = UIView()
self.view.addSubview(grayBox)
grayBox.backgroundColor = .gray
grayBox.snp.makeConstraints { (make) in
make.width.height.equalTo(50)
make.leading.equalTo(greenBox.snp.trailing)
make.top.equalTo(yellowBox.snp.bottom)
}
let purpleBox = UIView()
grayBox.addSubview(purpleBox)
purpleBox.backgroundColor = .purple
purpleBox.snp.makeConstraints { (make) in
make.edges.equalTo(grayBox).inset(10)
}
}
}
