В вашем словаре views
, вы передаете неправильное представление для просмотра v0
. Вы должны использовать self
, который ссылается на текущий экземпляр класса вместо IndexD.self
, который относится к самому классу.
Измените ваш views
на:
views: ["v0": self]
Есть и другие вопросы, а также. Вы добавляете сгенерированные ограничения в self
, но их необходимо добавить к более высокому элементу в иерархии представлений. "H:|[v0]|"
будет генерировать ограничения, которые связаны с superview
self
, поэтому вам действительно нужно сделать superview?.addConstraints(...
.
С iOS 8 существует более простой способ активировать ограничения. Вы можете установить их свойство isActive
на true
, и они будут автоматически добавлены в соответствующие виды. Если у вас есть несколько ограничений для активации, вы можете вызвать NSLayoutContraint.activate()
с массивом ограничений, и iOS активирует все ограничения.
Если у вас нет NSLayoutFormatOptions
, просто пройдите []
. И, поскольку это значение по умолчанию для этого параметра, вы можете оставить options: []
в целом.
Так принимая все это во внимание, вот исправленная версия кода:
func contstraints() {
NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "H:|[v0]|", metrics: nil, views: ["v0": self]))
}
Спасибо за помощь! Когда я запускаю новый код, я получаю ошибку ** «Невозможно разобрать формат ограничения: Невозможно интерпретировать '|' символ, потому что связанный вид не имеет супервизора H: | [v0] | **. При удалении '|' из кода, который он запускает, но не создает ограничений – baxu
Что вы пытаетесь выполнить в частности? Поскольку это коллекцияViewCell, вы обычно не добавляете ограничения для самих ячеек для управления их компоновкой. Вы можете добавить в них ограничения, чтобы управлять расположением элементов внутри ячейки. – vacawama
Да, вы правы. Из дальнейших исследований я считаю, что динамическая автореализация ячеек - это то, что мне нужно использовать, а не ограничения. – baxu