向uiview添加约束时的SIGABRT

时间:2017-03-17 11:40:26

标签: swift debugging autolayout

再次自动布局让我摸不着头脑。我在我的班级顶部定义了一个UIView和UITextField:

var urlField = UITextField(frame: .zero)
var barView = UIView(frame: .zero)

我从viewWillAppear调用我的配置方法(所以我知道self.view已全部设置):

   override func viewWillAppear(_ animated: Bool) {
                configureURLBar()
    }

我在那里没什么特别的。

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

当它达到topAnchor约束时,我得到了例外,我不明白为什么。如果我反转第2行和第3行,它就不会爆炸直到它到达.topAnchor行,这就是问题所在。一旦我理解了这个例外的原因(如果你想知道我想要做什么),我可以问第二个问题:如何在我的顶部添加用户输入(url)栏UIWebView的。 (那也不起作用 - 如果我试图约束我的self.webView并且完美显示,那么结果相同)另外:我在调用viewWillAppear()之前调用self.view.setNeedsDisplay()。

2 个答案:

答案 0 :(得分:5)

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

试试这个:

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

答案 1 :(得分:0)

将您的逻辑包含在viewDidLayoutSubviews而不是viewWillAppear中... viewDidLayoutSubviews是处理几何的更好的地方