Как обновить ограничение постоянной высоты UIView с помощью IBOutlet

#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)  }   }  

IBOutlet в storryboard —- Иерархия в раскадровке —-

Комментарии:

1. UIViewController в сообщении об исключении говорится, что вы не установили пользовательский класс для своей сцены; Он создает UIViewController экземпляр, а не HomeViewController экземпляр, поэтому выхода нет

2. Ну, я прямо из раскадровки подключаю ограничение к NSLayoutConstraint внутри контроллера просмотра видимого экрана. Разве это не правильный путь? так как я обычно делаю это таким образом… Я добавил еще одну картинку с иерархией моей раскадровки

3. Как вы создали экземпляр контроллера представления? Все , что я могу вам сказать, это то, что в исключении говорится, что у вас есть экземпляр UIViewController , а не экземпляр HomeViewController . Убедитесь, что вы не получаете предупреждение в консоли о неизвестном классе контроллера представления.

Ответ №1:

Неясно, подключена ли ваша menuView розетка, но, судя по скриншоту, который вы включили, похоже, что это не так. В этом случае это будет сбой, потому menuView что при попытке позвонить будет ноль self.menuView.layoutIfNeeded() . В любом случае, тебе все равно следовало бы позвонить self.view.layoutIfNeeded() вместо этого.

Комментарии:

1. Да, я видел это, когда делал снимок экрана, поэтому подключил его, но все равно вылетает с той же ошибкой…

Ответ №2:

Похоже, это была ошибка Xcode, я перезапустил проект на следующий день, и он работал нормально. Поэтому, если вы хотите отредактировать ограничение с помощью анимации, вы можете сделать это, как показано выше 🙂