2017-03-17 44 views
0

再一次,自動佈局讓我撓了撓頭。我定義一個UIView,同時也是UITextField在我班上的第一名:SIGABRT向UI視圖添加約束條件

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約束我得到的例外,我不明白爲什麼。如果我將第二行和第三行顛倒過來,它不會爆炸,直到它到達.topAnchor線,所以這就是問題所在。一旦我理解了這個異常的原因(如果你想知道我在做什麼),我可以問第二個問題:我如何在UIWebView的頂部添加一個用戶輸入(url)欄。 (這也不起作用 - 如果我試圖限制我的self.webView完全顯示,則結果相同)另外:我在調用viewWillAppear()之前調用self.view.setNeedsDisplay()。

回答

2

您需要先加入您的視圖父視圖。之後,您可以添加約束。

試試這個:

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

當然!我需要一些咖啡,然後我會爲自動佈局編寫一個清單(步驟)。這麼多事情要一次追蹤!非常感謝。 – Mozahler

0

包括你的邏輯viewDidLayoutSubviews,而不是在viewWillAppear ... viewDidLayoutSubviews是一個更好的地方來處理幾何

+0

它仍然在同一行炸燬。 – Mozahler

+0

這是什麼意思? – Taher

+0

只注意到標題 – Taher