Swift 向uiview添加约束时发出SIGABRT

Swift 向uiview添加约束时发出SIGABRT,swift,debugging,autolayout,Swift,Debugging,Autolayout,自动布局再一次让我抓狂。我在类的顶部定义UIView和UITextField: var urlField = UITextField(frame: .zero) var barView = UIView(frame: .zero) 我从ViewWillDisplay调用我的配置方法(因此我知道self.view已全部设置): 我在那里没有做什么特别的事 func configureURLBar() { barView.translatesAutoresizingMaskIntoCons

自动布局再一次让我抓狂。我在类的顶部定义UIView和UITextField:

var urlField = UITextField(frame: .zero)
var barView = UIView(frame: .zero)
我从ViewWillDisplay调用我的配置方法(因此我知道self.view已全部设置):

我在那里没有做什么特别的事

func configureURLBar() {
    barView.translatesAutoresizingMaskIntoConstraints = false
    barView.topAnchor.constraint(equalTo: self.view.layoutMarginsGuide.topAnchor).isActive = true
    barView.heightAnchor.constraint(equalToConstant: 30).isActive = true
    }

当它到达topAnchor约束时,我得到了异常,我不明白为什么。如果我倒转第二和第三条线,它在到达.topAnchor线之前不会爆炸,所以这就是问题所在。一旦我理解了这个异常的原因,我可以问第二个问题(如果你想知道我在做什么):如何在UIWebView的顶部添加一个用户输入(url)栏。(这也不起作用-如果我试图约束我的self.webView(它显示得非常完美),结果是一样的)另外:我在调用viewwillbeen()之前调用self.view.setNeedsDisplay()。

将逻辑包含在
viewDidLayoutSubviews
中,而不是
viewwillbeen
。。。
viewdilayoutsubviews
是处理几何图形的更好地方

您必须首先将视图添加到父视图中。之后,可以添加约束

试试这个:

override func viewWillAppear(_ animated: Bool) 
{
self.view.addSubview(barView)               
configureURLBar()
}

它仍然在同一条线上爆炸。上面写着什么?只是注意到了头。不多:线1:SIGABRT。当然,控制台日志(调试区域)中没有显示任何内容!我需要一些咖啡,然后我会写一份自动布局的清单(步骤)。有那么多的事情需要一次跟踪!非常感谢。
override func viewWillAppear(_ animated: Bool) 
{
self.view.addSubview(barView)               
configureURLBar()
}