【问题标题】:How to update the constant height constraint of a UIView with IBOutlet如何使用 IBOutlet 更新 UIView 的恒定高度约束
【发布时间】:2021-12-22 15:14:59
【问题描述】:

我正在尝试更改菜单视图的高度以使其打开,但是当我添加 NSLayoutConstraint 的 IBOutlet 时,它不断使我的应用程序崩溃并出现相同的错误代码。我三次检查插座是否正确连接,所以这不是问题。我是否遗漏了什么,或者这是否在新的 Xcode 中进行了更新,因为所有其他问题都来自至少 5 年前。

谢谢!

错误信息:

线程 1:“[ setValue:forUndefinedKey:]:此类不符合键 menuHeightConstraint 的键值编码。”

相关代码:

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 in storryboard ---- Hierarchy in storyboard ----

【问题讨论】:

  • UIViewController 在异常消息中告诉您尚未为场景设置自定义类;它正在创建一个UIViewController 实例,而不是HomeViewController 实例,所以插座不存在
  • 好吧,我直接来自故事板,将约束连接到可见屏幕的 ViewController 内的 NSLayoutConstraint。这不是正确的方法吗?因为我通常这样做...我添加了另一张带有故事板层次结构的图片
  • 你是如何创建视图控制器实例的?我只能告诉你,异常说你有一个UIViewController 的实例,而不是HomeViewController 的一个实例。检查您是否在控制台中收到有关未知视图控制器类的警告。

标签: ios swift storyboard nslayoutconstraint


【解决方案1】:

目前尚不清楚您的menuView 插座是否已连接,但从您提供的屏幕截图来看,似乎没有。在这种情况下,它会崩溃,因为当您尝试调用 self.menuView.layoutIfNeeded() 时,menuView 将为零。不管怎样,你应该打电话给self.view.layoutIfNeeded()

【讨论】:

  • 是的,我在截屏时看到了,所以我连接了它,但仍然崩溃并出现同样的错误......
【解决方案2】:

这似乎是一个 Xcode 错误,我第二天重新启动了项目,它工作正常。所以如果你想用动画编辑一个约束,你可以像上面看到的那样做:-)

【讨论】:

    猜你喜欢
    • 2017-07-28
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多