再次自动布局让我摸不着头脑。我在我的班级顶部定义了一个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()。
答案 0 :(得分:5)
您必须先将视图添加到父视图。之后,您可以添加约束。
试试这个:
override func viewWillAppear(_ animated: Bool)
{
self.view.addSubview(barView)
configureURLBar()
}
答案 1 :(得分:0)
将您的逻辑包含在viewDidLayoutSubviews
而不是viewWillAppear
中...
viewDidLayoutSubviews
是处理几何的更好的地方