在扩展'The view hierarchy is not prepared for the constraint'中获取错误



我在thumbnailImageView之上添加缩略图MaskView,它可以工作!

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] [布局约束]视图层次结构未为 约束: (非活动(> 添加到视图时,约束项必须 该视图(或视图本身(的后代。这将崩溃,如果 在视图层次结构之前需要解决约束 组装。Break on -[UIView(UIConstraintBasedLayout( _viewHierarchyUnpreparedForConstraint:] 进行调试。2019-10-04 14:19:13.152718+0100 富人[1589:18861] [布局约束] 视图 层次结构未准备好约束。 约束: 容器层次结构:>视图 在容器层次结构中找不到:>该视图的 超级视图:> 2019-10-04 14:19:13.160046+0100 Rich 人[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) 
])

它将向正确的视图添加约束

相关内容

最新更新