У меня есть UIView, который я программно добавляю со следующим кодом в viewDidLoad.
dropMenuView = YNDropDownMenu(frame: CGRect(x: 0.0, y: 0, width: UIScreen.main.bounds.width, height: 40.0), dropDownViews: [typeView, brandView, priceView], dropDownViewTitles:["Type", "Brand", "Price"])
self.view.addSubview(dropMenuView)
Приведенный выше код создает представление с правильной шириной для текущей ориентации, но если пользователь меняет ориентацию своего устройства, ширина представления не обновляется. Я попытался добавить новое ограничение в viewWillTransitionTo:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
let widthConstraint = NSLayoutConstraint(item: dropMenuView, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: self.view, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 100)
dropMenuView.addConstraints([widthConstraint])
dropMenuView.layoutIfNeeded()
}
Я пробовал несколько мутаций в приведенном выше коде, пытаясь заставить его работать. Обычно я получаю сообщение об ошибке: «NSLayoutConstraint for >: Unknown layout attribute»
Я не могу не думать, что делаю это неправильно. Изменяет ли путь добавление новых ограничений на ориентацию? Я попытался просто добавить ограничение равной ширины после добавления подпредставления, но получаю ту же ошибку. Я никогда раньше не добавлял ограничения программно, так что для меня это неизведанные воды. Какой подход здесь был бы лучшим?