我正在通过继承默认组件在Swift中开发自定义组件。下面是我的一段代码:
class DirectionButton: UIButton {
var backgroundImage: UIImageView!
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
styleComponent()
}
override init(frame: CGRect) {
super.init(frame: frame)
styleComponent()
}
func styleComponent() {
backgroundImage = UIImageView(image: UIImage(named: "seta-proximo"))
backgroundImage.contentMode = .ScaleAspectFit
self.setNeedsLayout()
self.layoutIfNeeded()
self.addSubview(backgroundImage)
let imageConstraints = NSLayoutConstraint(item: self, attribute: .TrailingMargin, relatedBy: .Equal, toItem: self, attribute: .Trailing, multiplier: 1, constant: 10)
backgroundImage.addConstraint(imageConstraints)
}
}
backgroundImage
变量需要距按钮右侧10个点,这就是我需要约束的原因。
运行后我得到了一个类似的异常:视图层次结构没有为约束做好准备。
如何正确添加约束?
答案 0 :(得分:0)
<强>被修改强>
答案 1 :(得分:0)
阅读文档,我按照提示使用布局锚点@AjayBeniwal建议。我需要的代码如下(在我将子视图添加到按钮后):
backgroundImage.trailingAnchor.constraintEqualToAnchor(self.layoutMarginsGuide.trailingAnchor, constant: -10).active = true
backgroundImage.bottomAnchor.constraintEqualToAnchor(self.layoutMarginsGuide.bottomAnchor).active = true
backgroundImage.centerYAnchor.constraintEqualToAnchor(self.layoutMarginsGuide.centerYAnchor).active = true
这样,图像垂直集中在距离右边缘20个点的按钮上。
答案 2 :(得分:0)
//为ImageView提供Constrain Outlet
http -> https