'Cannot Install Constraint', 原因:'视图之间没有共同的超级视图
'Cannot Install Constraint', reason: 'No common superview between views
import UIKit
import SnapKit
class RecordButton: UIView {
let box = UIView()
let container = UIView()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
func setup() {
container.snp_makeConstraints { (make) -> Void in
make.width.equalTo(200)
make.height.equalTo(200)
make.center.equalTo(self.container)
}
box.snp_makeConstraints { (make) -> Void in
make.top.equalTo(container).offset(50)
make.left.equalTo(container).offset(50)
make.bottom.equalTo(container).offset(-50)
make.right.equalTo(container).offset(-50)
make.center.equalTo(container)
}
self.addSubview(container)
container.addSubview(box)
setColor()
}
func setColor() {
self.container.backgroundColor = UIColor.blackColor()
self.box.backgroundColor = UIColor.orangeColor()
}
}
为什么会显示这个错误?还有其他方法可以执行此操作吗?有什么建议吗? centre.equalTo 会产生此错误。我是 swift 的新手,正在尝试实施 SnapKit 框架
这意味着您的视图或任何控制器应该在公共视图中。
例如,视图 A 有两个按钮,比如 X 和 Y,视图 B 有两个按钮 P 和 K,那么您可以设置 P 和 K 的约束,而不是相对于视图 A 的超级视图 B。
如果有多个超级视图,请确保您已为每个超级视图提供适当的约束。那么只会满足端点视图的约束。
更新日期:
首先在容器中添加框,在其父视图中添加容器,然后设置约束。并确保您分别在 self.container
和 container
中获得 container view
和 box view
的中心。如果您正在设置 top,bottom,leading and trailing
那么也不需要设置中心!
希望这会有所帮助:)
import UIKit
import SnapKit
class RecordButton: UIView {
let box = UIView()
let container = UIView()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
func setup() {
container.snp_makeConstraints { (make) -> Void in
make.width.equalTo(200)
make.height.equalTo(200)
make.center.equalTo(self.container)
}
box.snp_makeConstraints { (make) -> Void in
make.top.equalTo(container).offset(50)
make.left.equalTo(container).offset(50)
make.bottom.equalTo(container).offset(-50)
make.right.equalTo(container).offset(-50)
make.center.equalTo(container)
}
self.addSubview(container)
container.addSubview(box)
setColor()
}
func setColor() {
self.container.backgroundColor = UIColor.blackColor()
self.box.backgroundColor = UIColor.orangeColor()
}
}
为什么会显示这个错误?还有其他方法可以执行此操作吗?有什么建议吗? centre.equalTo 会产生此错误。我是 swift 的新手,正在尝试实施 SnapKit 框架
这意味着您的视图或任何控制器应该在公共视图中。 例如,视图 A 有两个按钮,比如 X 和 Y,视图 B 有两个按钮 P 和 K,那么您可以设置 P 和 K 的约束,而不是相对于视图 A 的超级视图 B。
如果有多个超级视图,请确保您已为每个超级视图提供适当的约束。那么只会满足端点视图的约束。
更新日期:
首先在容器中添加框,在其父视图中添加容器,然后设置约束。并确保您分别在 self.container
和 container
中获得 container view
和 box view
的中心。如果您正在设置 top,bottom,leading and trailing
那么也不需要设置中心!
希望这会有所帮助:)