Я добавляю thumbnailMaskView поверх thumbnailImageView, и это работает!
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 Rich People [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 Rich People [1589: 18861] *** Завершение работы приложения из-за невыполненного исключения «NSGenericException», причина: «Невозможно установить ограничение на просмотр. Ссылка ссылается на что-то извне поддерева представления? Это незаконно. ограничение: (активно)> просмотр:> '