我在thumbnailImageView的顶部添加thumbnailMaskView,它可以正常工作!
func setupViews() {
addSubview(thumbnailImageView)
addSubview(thumbnailMaskView)
addConstraintsWithFormat(format: "H:|[v0]|", views: thumbnailImageView)
addConstraintsWithFormat(format: "V:|-16-[v0]-16-|", views: thumbnailImageView)
addConstraints([NSLayoutConstraint(item: thumbnailMaskView, attribute: .leading, relatedBy: .equal, toItem: thumbnailImageView, attribute: .leading, multiplier: 1, constant: 0)])
addConstraints([NSLayoutConstraint(item: thumbnailMaskView, attribute: .trailing, relatedBy: .equal, toItem: thumbnailImageView, attribute: .trailing, multiplier: 1, constant: 0)])
addConstraints([NSLayoutConstraint(item: thumbnailMaskView, attribute: .top, relatedBy: .equal, toItem: thumbnailImageView, attribute: .top, multiplier: 1, constant: 0)])
addConstraints([NSLayoutConstraint(item: thumbnailMaskView, attribute: .bottom, relatedBy: .equal, toItem: thumbnailImageView, attribute: .bottom, multiplier: 1, constant: 0)])
}
我正在尝试使用以下代码将该代码提取到UIView Extension
:
extension UIView {
func addOnTop(_ topView: UIView) {
addConstraints([NSLayoutConstraint(item: topView, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leading, multiplier: 1, constant: 0)])
addConstraints([NSLayoutConstraint(item: topView, attribute: .trailing, relatedBy: .equal, toItem: self, attribute: .trailing, multiplier: 1, constant: 0)])
addConstraints([NSLayoutConstraint(item: topView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1, constant: 0)])
addConstraints([NSLayoutConstraint(item: topView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1, constant: 0)])
}
}
[使用extension
功能thumbnailImageView.addOnTop(thumbnailMaskView)
时出现错误:
2019-10-04 14:19:13.149081 + 0100富人[1589:18861][LayoutConstraints]没有为视图准备层次结构约束:(不活动)>添加到视图时,约束的项必须为该视图(或视图本身)的后代。如果约束需要在视图层次结构被解决之前解决组装好的。在[[UIView(UIConstraintBasedLayout)_viewHierarchyUnpreparedForConstraint:]进行调试。 2019-10-04 14:19:13.152718 + 0100富人[1589:18861] [LayoutConstraints]视图不准备约束的层次结构。约束:容器层次结构:>查看在容器层次结构中找不到:>该视图的观看:> 2019-10-04 14:19:13.160046 + 0100 RichPeople [1589:18861] ***由于未捕获的异常而终止应用程序“ NSGenericException”,原因:“无法在视图上安装约束。约束是否从的子树外部引用某些内容风景?那是非法的。约束:(活动)>视图:>'
要向视图添加约束,则这些约束应用于子视图/后代视图,因此最好使用activate
NSLayoutConstraint.activate([
topView.leadingAnchor.constraint(equalTo: self.leadingAnchor),
topView.trailingAnchor.constraint(equalTo: self.trailingAnchor),
topView.topAnchor.constraint(equalTo: self.topAnchor),
topView.bottomAnchor.constraint(equalTo: self.bottomAnchor)
])
并且它将约束添加到正确的视图中