xhr Asked:2020-02-27 21:25:12 +0000 UTC2020-02-27 21:25:12 +0000 UTC 2020-02-27 21:25:12 +0000 UTC SnapKit 中的 .offset 和 .inset 有什么区别? 772 在 SnapKit 中,.offset 和 .inset 执行表面上相似的操作。在哪些情况下使用 .offset() 是正确的,在哪些情况下使用 .inset()? ios 1 个回答 Voted Best Answer schmidt9 2020-02-28T00:07:19Z2020-02-28T00:07:19Z 简而言之,对于顶部和左侧边框,偏移和插入给出相同的结果,而对于右侧和底部 - 相反。这意味着,例如,如果视图 1 的左边界附加到视图 2 的右边界,则正偏移量会将视图 2 向右移动,并向左插入,如果一个视图在另一个视图内,那么结果也会有所不同。 一般来说,如果您牢记这些细微差别并调整值,这些方法是可以互换的 查看文档中的示例 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) } } }
简而言之,对于顶部和左侧边框,偏移和插入给出相同的结果,而对于右侧和底部 - 相反。这意味着,例如,如果视图 1 的左边界附加到视图 2 的右边界,则正偏移量会将视图 2 向右移动,并向左插入,如果一个视图在另一个视图内,那么结果也会有所不同。
一般来说,如果您牢记这些细微差别并调整值,这些方法是可以互换的
查看文档中的示例
一样
这是另一个例子来说明