#ios #swift #storyboard #nslayoutconstraint
Вопрос:
Я пытаюсь изменить высоту своего представления меню, чтобы оно открывалось, но когда я добавляю IBOutlet NSLayoutConstraint, оно продолжает выводить мое приложение из строя с тем же кодом ошибки. Я трижды проверил, правильно ли подключена розетка, так что проблема не в этом. Я что-то упускаю или это обновлено в новом Xcode, как и все остальные вопросы, по крайней мере, 5 лет назад.
Спасибо!
сообщение об ошибке:
Поток 1: «[lt;UIViewController 0x7f8fe2705330gt; Значение набора:forUndefinedKey:]: этот класс не соответствует кодированию значения ключа для ключевого ограничения Menuheight».
Соответствующий код:
class HomeViewController: UIViewController { // MARK: IBOutlets @IBOutlet weak var menuHeightConstraint: NSLayoutConstraint! @IBOutlet weak var menuView: UIView! // MARK: Variables var menuIsOpen = false // MARK: IBaction functions @IBAction func openMenu() { menuIsOpen.toggle() menuHeightConstraint.constant = menuIsOpen ? 180 : 55 UIView.animate( withDuration: 1, delay: 0, options: .curveEaseIn, animations: { self.menuView.layoutIfNeeded() }, completion: nil) } }
Комментарии:
1.
UIViewController
в сообщении об исключении говорится, что вы не установили пользовательский класс для своей сцены; Он создаетUIViewController
экземпляр, а неHomeViewController
экземпляр, поэтому выхода нет2. Ну, я прямо из раскадровки подключаю ограничение к NSLayoutConstraint внутри контроллера просмотра видимого экрана. Разве это не правильный путь? так как я обычно делаю это таким образом… Я добавил еще одну картинку с иерархией моей раскадровки
3. Как вы создали экземпляр контроллера представления? Все , что я могу вам сказать, это то, что в исключении говорится, что у вас есть экземпляр
UIViewController
, а не экземплярHomeViewController
. Убедитесь, что вы не получаете предупреждение в консоли о неизвестном классе контроллера представления.
Ответ №1:
Неясно, подключена ли ваша menuView
розетка, но, судя по скриншоту, который вы включили, похоже, что это не так. В этом случае это будет сбой, потому menuView
что при попытке позвонить будет ноль self.menuView.layoutIfNeeded()
. В любом случае, тебе все равно следовало бы позвонить self.view.layoutIfNeeded()
вместо этого.
Комментарии:
1. Да, я видел это, когда делал снимок экрана, поэтому подключил его, но все равно вылетает с той же ошибкой…
Ответ №2:
Похоже, это была ошибка Xcode, я перезапустил проект на следующий день, и он работал нормально. Поэтому, если вы хотите отредактировать ограничение с помощью анимации, вы можете сделать это, как показано выше 🙂